当我创建这个模块时,我首先让 tkinter 窗口(它的所有设置都是全局的)按预期工作。我可以运行模块并且窗口工作,从输入字段获取输入并显示欢迎或错误消息。但是当我将它们放入一个函数中时,它停止正常工作,如图所示。全局创建窗口时的外观,按钮和输入正常工作:
https://gyazo.com/ffcb16416b8a971c09bfa60ee9367bbd
在函数内部创建时的外观:
https://gyazo.com/c8858a2793befafa41e71d1099f021d3
错误消息立即弹出,然后是带有输入字段但没有按钮的主窗口。
这是我在函数内创建窗口和设置的代码:
def userSign(userEntry):
userId = userEntry.get()
if userId.isdigit() == True and len(userId) == 4:
welcomeWindow = tkinter.Tk()
welcomeWindow.title("Welcome")
welcomeWindow.geometry("200x50")
welcome = tkinter.Label(master=welcomeWindow, text="Welcome "+userId,font=("Helvetica", 18, "bold"))
welcome.grid()
welcomeWindow.mainloop()
else:
errorWindow = tkinter.Tk()
errorWindow.title("ERROR")
errorWindow.geometry("500x50")
error = tkinter.Label(master=errorWindow, text="ERROR: "+userId +" DOES NOT MEET CRITERIA", font=("Helvetica", 18, "bold"))
error.grid()
userId=""
errorWindow.mainloop()
def show():
window = tkinter.Tk()
window.title("Sign In")
window.geometry("250x100")
signInPrompt = tkinter.Label(master = window, text = "Enter your ID to sign in")
signInPrompt.grid(column=0,row=2)
userEntry = tkinter.Entry(master = window)
userEntry.grid(column=0,row=4)
enterButton = tkinter.Button(master = window, text="Sign in", command=userSign(userEntry))
enterButton.grid(column=0,row=6)
window.mainloop()
我如何获得它以便我的窗口在函数内部创建时正常工作,因为该模块需要由不同的主模块调用。
您正在创建两个实例,Tk()
这是一个坏主意。而是Toplevel()
用于其他窗口。
当您在函数内创建变量或小部件时,名称在局部范围内,在函数外不可用。当函数结束时,它们将被垃圾收集。
此外,正如@fhdrsdg 指出的,按钮命令中存在问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句