【问题标题】:How do I validate a button in tkinter so that the function is only called once?如何验证 tkinter 中的按钮,以便该函数只调用一次?
【发布时间】:2013-12-28 05:13:14
【问题描述】:

当我多次按下“Enter”按钮时,文本字段将继续显示,但我希望这样,一旦我输入我的姓名并按下按钮,该按钮就会停用。我该怎么做?

class Enter_Name_Window(tk.Toplevel):
    '''A simple instruction window'''
    def __init__(self, parent):
        tk.Toplevel.__init__(self, parent)
        self.text = tk.Text(self, width=40, height=2)
        self.text.pack(side="top", fill="both", expand=True)
        self.text.insert("end", "Please enter your name and class. ")

        enter_name = Entry(self)
        enter_name.pack()

        enter_name.focus_set()

    def callback():
        self.display_name = tk.Text(self, width=40, height=2)
        self.display_name.pack(side="top", fill="both", expand=True)
        self.display_name.insert("end", "Now please enter your tutor group.")
        tutor = Entry(self)
        tutor.pack()

        tutor.focus_set()

        Enter_0_2 = Button(self, text="Enter", width=10, command=callback2)
        Enter_0_2.pack()

    def callback2():
        self.display_name = tk.Text(self, width=40, height=2)
        self.display_name.pack(side="top", fill="both", expand=True)
        self.display_name.insert("end", "Let's begin! Exit back to main screen.")


    Enter_0 = Button(self, text="Enter", width=10, command=callback)
    Enter_0.pack()

【问题讨论】:

    标签: python button user-interface tkinter


    【解决方案1】:

    在按钮的config() 方法中使用state="disabled" 来禁用小部件。您可以使用state="normal" 以类似的方式启用已禁用的小部件。

    基于您的示例代码的示例:

    import Tkinter as tk
    
    
    class Application(tk.Frame):
    
        def __init__(self, master):
            tk.Frame.__init__(self, master)
            self.text = tk.Text(self, width=40, height=2)
            self.text.pack(side="top", fill="both", expand=True)
            self.text.insert("end", "Please enter your name and class. ")
    
            enter_name = tk.Entry(self)
            enter_name.pack()
            self.enter_0 = tk.Button(self, text="Enter", width=10, command=self.callback)
            self.enter_0.pack()
    
            enter_name.focus_set()
            self.pack()
    
        def callback(self):
            self.display_name = tk.Text(self, width=40, height=2)
            self.display_name.pack(side="top", fill="both", expand=True)
            self.display_name.insert("end", "Now please enter your tutor group.")
            tutor = tk.Entry(self)
            tutor.pack()
            tutor.focus_set()
            self.enter_0.config(state="disabled")
    
            Enter_0_2 = tk.Button(self, text="Enter", width=10, command=self.callback2)
            Enter_0_2.pack()
    
        def callback2(self):
            self.display_name = tk.Text(self, width=40, height=2)
            self.display_name.pack(side="top", fill="both", expand=True)
            self.display_name.insert("end", "Let's begin! Exit back to main screen.")
    
    root = tk.Tk()
    root.geometry("600x400")
    app = Application(root)
    app.mainloop()
    

    【讨论】:

    • "active" 只有当鼠标指针在按钮上时才应该使用,否则"normal" 是正确的状态。
    • @BryanOakley 感谢您的更正,我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多