【发布时间】:2012-02-22 16:10:44
【问题描述】:
我在纠结 Tkinter 和 Python。我有一个带有几个按钮的基本 gui,一个按钮消失并执行需要一些时间的操作,这是可变的。问题是当我点击这个按钮时,我的整个 gui 被锁定/没有正确显示 - 我猜是因为它试图做这些需要一些时间的事情并且它阻塞了 gui。
我已经研究过线程和队列,但我无法弄清楚。我想我需要在一个线程上触发我的查找方法,然后在结果返回时将结果排队并在返回时更新列表框?
如果这对我使用线程的方式有影响,我就在 Windows 上。
亲切的问候
大卫
基本代码如下。
class Search:
def __init__(self, master):
self.seeds = []
frame = Frame(master, width=700, height=500)
frame.pack_propagate(0)
frame.pack(expand=YES, fill=BOTH)
#
# Search results
#
l2 = Label(frame, text="results")
l2.pack(anchor=W)
self.resultfield = Listbox(frame, selectmode=BROWSE)
self.resultfield.grid(row=3, column=1, sticky=N+W+S+E, columnspan=3)
self.resultfield.pack(fill=BOTH)
frame1 = Frame(frame)
frame1.pack()
# Button to action the search
self.getSearchbut = Button(frame1, text="Do Search", command=self.getSearch)
self.getSearchbut.grid(row=1, column=2)
self.getSearchbut.pack()
def getSearch(self):
sa = SearchApi(self.seeds)
results = sa.lookup(self)
for result in results:
self.resultfield.insert(END, user)
def putCSV(self):
print "put the csv files"
class SearchApi:
def __init__(self, seeds):
self.seeds = seeds
def lookup(self):
results = []
# I do something here that takes a while
return results
if __name__ == "__main__":
root = Tk()
root.title("Search")
app = Search(root)
root.mainloop()
【问题讨论】:
-
您能发布您尝试过的线程代码吗?根据我的经验,一旦你关闭线程,问题通常集中在没有对线程进行编程以保持不变或线程本身被挂起并且无法放弃并将控制权交还给图形用户界面。
-
这无论如何都与 TKinter 无关...