【问题标题】:tkinter read button statetkinter 读取按钮状态
【发布时间】:2014-11-10 16:42:10
【问题描述】:

我有一个按钮,通常用于在按下时打印一行数据——这部分工作正常。如果另一个选项(复选框)打开,则应连续打印数据,直到再次按下该按钮。因此,我将其标签更改为“停止”并等待按钮状态从正常变为活动。但是,循环永远不会执行。以下是相关代码:

self.read_button = Button(master, text='Read Data', command=read_data)
.
.
def read_data(self):
    if self.continuous.get()==1:
        self.read_button['text']='Stop'
        self.read_button['command']=None
        self.read_button.update_idletasks()
        # The data is never printed.
        while self.read_button['state']==NORMAL:
            print_data()
        self.read_button['text']='Read Data'
        self.read_button['command']=read_data
    else:
        print_data()

感谢您的帮助。这看起来很简单......

【问题讨论】:

    标签: python button tkinter state


    【解决方案1】:

    一般来说,Tkinter 不能很好地处理 while 循环。您的所有功能都需要及时结束,以便 Tkinter 可以处理其任务,例如重绘窗口和检查用户是否单击/键入了任何内容。如果进入无限循环,UI 将冻结并停止响应用户输入。如果你需要连续执行一些动作,你应该使用afterafter_idle方法。

    例子:

    from Tkinter import *
    
    def print_data():
        print "printing data..."
        if read_button["text"] == "Stop":
            #call this again in 10 milliseconds
            root.after(10, print_data)
    
    def read_button_clicked():
        read_button.config(command=stop_button_clicked)
        read_button.config(text="Stop")
        print_data()
    
    def stop_button_clicked():    
        read_button.config(command=read_button_clicked)
        read_button.config(text="Read Data")
    
    root = Tk()
    
    read_button = Button(root, text="Read Data", command=read_button_clicked)
    read_button.pack()
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2018-07-27
      • 2012-12-01
      • 2017-03-08
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      相关资源
      最近更新 更多