创建此模块时,我首先使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()
如何获取它,以便在函数内部创建窗口时可以正常工作,因为该模块需要由其他主模块调用。
答案 0 :(得分:0)
您正在创建Tk()
的两个实例,这是个坏主意。而是将Toplevel()
用于其他窗口。
在函数内部创建变量或窗口小部件时,名称在本地范围内,在函数外部不可用。当函数结束时,它们将被垃圾回收。
此外,正如@fhdrsdg指出的那样,按钮命令中存在问题。