【问题标题】:Tkinter mainloop broken, messagebox keeps popping up [duplicate]Tkinter mainloop坏了,消息框不断弹出[重复]
【发布时间】:2021-06-30 16:50:36
【问题描述】:
class StartUp():
    def __init__(self):
        pass

    def verify(self):
        username = ("s")
        password = ("s")
        
        usernameEntry = usernameVar.get()
        passwordEntry = passVar.get()

        start = StartUp()

        if usernameEntry == username and passwordEntry == password:
            start.login() 
        else: 
            #messagebox.showerror("Error","Wrong Credentials")

            
    def login(self):
        #Create a window
        global usernameVar, passVar
        
        verify = StartUp()
        
        window = Tk()
        window.title("Login")
            
        userPassLabel = Label(window, font="Helvetica 18 bold", text="Royal Mail")
        userPassLabel.grid(row=0, column=0, sticky=W)

        usernameVar = StringVar()
        usernameLabel = Label(window, font="Arial", text="Username:")
        usernameLabel.grid(row=1, column=0, sticky=W)
        usernameEntry= Entry(window, width=30, bg="light blue",textvariable = usernameVar, )
        usernameEntry.grid(row=1, column=1, sticky=W)
            
        passVar = StringVar()
        passLabel = Label(window, font="Arial", text="Password:")
        passLabel.grid(row=2, column=0, sticky=W)
        passEntry= Entry(window, width=30, bg="light blue",textvariable = passVar, show ="●")
        passEntry.grid(row=2, column=1, sticky=W)
        
        b1= Button(window, text="Enter", command=verify.verify())
        b1.grid(row=3, column=0, sticky=W)

        window.mainloop()


start = StartUp()
start.login()

代码似乎不起作用。消息框只会弹出。然后输入按钮不起作用。不知道出了什么问题。我对 OOP 很陌生,所以不确定是否与此有关。

另一个问题是我如何能够将一个变量从一个窗口/类中的输入框传送到另一个窗口/类?全局是一个可行的选择,还是有更好的方法可以从条目框中使用 .get()。

感谢您的帮助

【问题讨论】:

    标签: python tkinter widget messagebox mainloop


    【解决方案1】:

    当您使用() 时,您会立即调用该函数。当您将() 与按钮一起使用时,它会破坏拥有按钮本身的目的。所以去掉括号,()

    b1 = Button(window, text="Enter", command=verify.verify)
    

    当函数被调用时,条目中的值是空的,因此else被触发。

    【讨论】:

    • 这解决了它,谢谢:)
    • @CoolCloud:重复回答重复的问题并不是提高代表的最佳方式……
    • @CoolCloud 是的,你回答得太快了,我不得不等 5 分钟 :)
    • @martineau 大多数时候,回答问题会更容易。我认为这是stackoverflow的一个缺陷。我能想到的唯一解决方案是一个包含最常见 tkinter 错误的网站,我可以将其添加为书签。
    • @martineau 懒惰?我的意思是,除了回答问题和寻找重复项之外,我们都有自己的工作,对吧?我确实将所有这些都复制到了某个地方,但是在系统重置时我也丢失了所有这些。我们可以忽略这个问题并等待其他人也将其标记为重复。但我不认为忽略和希望是最好的做法。
    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多