【发布时间】:2020-09-08 09:22:38
【问题描述】:
我在尝试让 tkinter(尤其是 Entry 类)使用线程时遇到了一些奇怪的问题。我已将问题范围缩小到以下示例:
from threading import Thread
from tkinter import *
class App:
def __init__(self):
self.root = Tk()
self.field = Entry(self.root)
self.field.insert(0,200)
self.but = Button(text = 'get', command = Thread(target = self.getField,
args = self.field.get()
).start)
self.field.pack()
self.but.pack()
def getField(self, *args):
for arg in args:
print (arg)
return
myApp = App()
myApp.root.mainloop()
出于某种原因self.field.get() 分别返回输入字段中的每个数字;我需要getField() 中的*args 来发现这一点。当您按下按钮时,将打印以下内容:
2
0
0
我希望 .get() 返回整个字段条目。奇怪的是,.get() 也不会响应新的字段条目,更改 UI 中的值会导致相同的输出。
以下没有线程的代码完美运行:
from threading import Thread
from tkinter import *
class App:
def __init__(self):
self.root = Tk()
self.field = Entry(self.root)
self.field.insert(0,200)
self.but = Button(text = 'get', command = self.getField)
self.field.pack()
self.but.pack()
def getField(self, *args):
print(self.field.get())
return
myApp = App()
myApp.root.mainloop()
我的线程代码有什么问题?
【问题讨论】:
标签: python python-3.x multithreading tkinter tkinter-entry