繁体   English   中英

tkinter读取按钮状态

[英]tkinter read button state

我有一个按钮,通常在按下该按钮时可以打印一行数据-该部分工作正常。 如果另一个选项(复选框)处于打开状态,则应连续打印数据,直到再次按下该按钮为止。 因此,我将其标签更改为“停止”,然后等待按钮状态从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()

谢谢你的帮助。 这看起来很简单。

一般来说,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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM