tkinter读取按钮状态

时间:2014-11-10 16:42:11

标签: python button tkinter state

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

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()

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

1 个答案:

答案 0 :(得分: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()