我在尝试让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()
分别返回输入字段中的每个数字;我需要*args
在getField()
中发现这一点。按下按钮时,将打印以下内容:
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()
我的线程代码有什么问题
Thread
的参数应作为元组传递,如文档中所述:args是目标调用的参数元组使用元组的唯一项是
self.field.get()
创建元组可以使代码正常工作:输出:
下面的代码让它为我工作:
它解决了这两个问题—它在一行中显示数字,因为您只调用getField函数中的self.field.get(),而不是作为参数。即使我更改了值,它也会显示正确的值,这对我来说并不适用于您发布的代码
相关问题 更多 >
编程相关推荐