我希望代码导入一个python文件,该文件显示一个带有2个按钮的tkinter窗口。根据用户按下哪个按钮,它运行一个函数,该函数应将某个字符串返回到原始python文件。在将输入框的内容返回到原始文件之前,我已经完成了此操作,但是对于此任务,我没有任何线索,因为代码对我来说很有意义,并且不会产生错误?
原始python代码:
def menu():
import Menu_window
Login_or_create= Menu_window.start()
print(Login_or_create)
if Login_or_create == "Login":
print("Logged in")
if Login_or_create == "Create":
print("Creating user")
导入的名为Menu_Window.py的文件:
from tkinter import *
from tkinter import ttk
class Menu_window():
def __init__(self,window):
self.window = window
self.window.title("Menu")
bottom_frame=LabelFrame(self.window)
bottom_frame.grid(row=2)
Login= Label(text = "Hello, Please login or create an account to play!")
Login.grid(row=0)
ttk.Button(bottom_frame,text = 'Login',command = returN()).grid(row=0)
ttk.Button(bottom_frame,text = 'Create account',command = returN2()).grid(row=0,column=1)
def returN():
return "Login"
def returN2():
return "Create"
def start():
window=Tk()
Login_or_Create=Menu_window(window)
window.mainloop()
window.destory()
答案 0 :(得分:1)
您的代码中存在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
文件代码中打印到控制台: