В вашем коде есть 3 основных недостатка.
Login_or_create = Menu_window.start()
всегда будет None
здесь. Это не присваивается значение из команд возврата на ваших кнопках.
Когда кнопка вызывает функцию и вы пытаетесь что-то вернуть, кнопка просто игнорирует это возвращаемое значение. Он никогда не будет присвоен вашей переменной, где вы назвали Menu_window.Start()
.
Чтобы взаимодействовать между классами, вам нужно передать один атрибут класса или сам класс другому. Поэтому в этом случае я передаю Menu()
на MenuWindow()
, чтобы иметь возможность вызвать метод, чтобы проверить, какая кнопка была нажата.
Я отредактировал ваш код, чтобы более точно следовать правилам стиля PEP8. Я также преобразовал ваш Menu_window
класс для наследования от tkinter tk для простоты использования.
Переименовано имя файла в соответствии с именем класса.
Начиная с py
код файла:
class Menu():
def __init__(self):
import MenuWindow
MenuWindow.start(self)
def check_tracker(self, tracker):
if tracker == "Login":
print("Logged in")
if tracker == "Create":
print("Creating user")
Menu()
Файл MenuWindow.py:
import tkinter as tk
from tkinter import ttk
class MenuWindow(tk.Tk):
def __init__(self, controller):
tk.Tk.__init__(self)
self.title("Menu")
self.controller = controller
bottom_frame= tk.LabelFrame(self)
bottom_frame.grid(row=2)
tk.Label(text = "Hello, Please login or create an account to play!").grid(row=0)
ttk.Button(bottom_frame, text='Login', command=self.return_n).grid(row=1)
ttk.Button(bottom_frame, text='Create account', command=self.return_n2).grid(row=1, column=1)
self.mainloop()
def return_n(self):
self.controller.check_tracker("Login")
def return_n2(self):
self.controller.check_tracker("Create")
def start(x):
MenuWindow(x)
В результате появляется окно, которое в зависимости от того, какая кнопка была нажата, будет выводиться на консоль из начального py
кода файла:
