【发布时间】:2014-09-14 20:16:33
【问题描述】:
我在 Python 3.3 中有一个 Tkinter-GUI,带有一个进度条和一个启动另一个线程的按钮。此线程在 10 秒内填充进度条,并在此期间在控制台上打印 0 到 99 之间的数字。
只要我不移动或调整 GUI 窗口的大小,它就可以正常工作。如果我删除标记的行 progress.step(1) 以便工作线程不会触及进度条,因此根本不会影响 GUI,即使我正在操作窗口,它也会在控制台上连续打印数字.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
import tkinter.ttk as ttk
import _thread
import time
root = Tk()
def start():
_thread.start_new_thread(thread, ())
def thread():
for i in range(0, 100):
time.sleep(0.1)
progress.step(1) #<-----
print(i)
progress = ttk.Progressbar()
progress.pack()
button = Button(root, text="Start", command=start)
button.pack()
root.mainloop()
为什么会发生这种情况,通常会采取什么措施来避免 GUI 操作导致工作线程中断?
提前致谢!
【问题讨论】:
-
它在 Linux Mint 16 上正常工作。
-
你使用的是哪个窗口管理器?
-
你为什么使用
_thread.start_new_thread()?请改用threading.Thread。 -
tkinter 的设计目的不是为了能够从创建小部件的线程以外的任何线程调用小部件方法。它可能有效,但可能无效。
-
好的。因此,对于 Windows7+Python+Tkinter,我别无选择,只能解决这个令人不快的问题。谢谢你的帮助! (我马上试试threading.Thread)
标签: python multithreading python-3.x tkinter freeze