Python 如何解决程序执行大循环时不断按下的tkinter按钮?
实际上,我想创建一个GUI来通过串口接收数据,但我遇到的一个问题是,按钮会一直按下,直到整个数据整理完成 为了让人们理解我遇到的情况,我修改了下面的代码Python 如何解决程序执行大循环时不断按下的tkinter按钮?,python,tkinter,Python,Tkinter,实际上,我想创建一个GUI来通过串口接收数据,但我遇到的一个问题是,按钮会一直按下,直到整个数据整理完成 为了让人们理解我遇到的情况,我修改了下面的代码 from Tkinter import * class GUIDemo(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.grid() self.createWidgets()
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()
您需要添加一个线程
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()
而且,线程带来了线程同步和协调的所有乐趣。确保保护您的数据结构,以防有人在数据保存完成之前再次按下按钮!哇!对我来说,线程是一个新事物,非常感谢你,我学到了一个新东西注:你不一定需要线程。这真的取决于所做的工作。如果你能把它分成小块,你就可以用主线程,用after命令一次只做一块。谢谢你的建议!!