如何解决程序做大循环时不断按下的tkinter按钮?

2024-10-02 22:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我想创建一个GUI来通过串口接收数据,但是我遇到了一个问题,就是这个按钮会一直按到整个数据整理完成

为了让人们更容易理解我遇到的情况,我修改了下面的代码

from Tkinter import *

class GUIDemo(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
        # self.datarcv()

    def createWidgets(self):
        self.inputText = Label(self)
        self.inputText["text"] = "Input:"
        self.inputText.grid(row=0, column=0)

        self.inputField = Entry(self)
        self.inputField["width"] = 50
        self.inputField.grid(row=0, column=1, columnspan=6)

        self.regist = Button(self, command=self.datasave)
        self.regist["text"] = "button"
        self.regist.grid(row=2, column=0)

    def datasave(self):
        a=0
        while a<100000000:
            a+=1
            print a



if __name__ == '__main__':
    root = Tk()
    app = GUIDemo(master=root)
    app.mainloop()

Tags: textselfmasterinitdefcolumnframegrid
1条回答
网友
1楼 · 发布于 2024-10-02 22:22:58

你需要添加一个线程

from Tkinter import *
import threading

class GUIDemo(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
        # self.datarcv()

    def createWidgets(self):
        self.inputText = Label(self)
        self.inputText["text"] = "Input:"
        self.inputText.grid(row=0, column=0)

        self.inputField = Entry(self)
        self.inputField["width"] = 50
        self.inputField.grid(row=0, column=1, columnspan=6)

        self.regist = Button(self, command=self.datasave_thread)
        self.regist["text"] = "button"
        self.regist.grid(row=2, column=0)

    def datasave_thread(self):
        self.thread = threading.Thread(None, self.datasave, None, (), {})
        self.thread.start()

    def datasave(self):
        a=0
        while a<100000000:
            a+=1
            print a



if __name__ == '__main__':
    root = Tk()
    app = GUIDemo(master=root)
    app.mainloop()

相关问题 更多 >