我试图启动一个线程窗口,因为我有正在运行的后台进程,但是在同一个线程下启动了两个相同的窗口,我不知道为什么。我猜这个代码可以优化! thx任何建议。
6/1:我按照建议进行修改,不在主循环中运行两个窗口,这样可行。第二部分是,一旦点击按钮,窗口就会被破坏" self.root.destroy()",但如果我尝试打开另一个窗口,它将无法打开。我在尝试启动新窗口之前进行检查,并且只有主线程正在运行,因此第一个线程消失了。不知道发生了什么,我无法通过运行的线程进行调试。
from Tkinter import *
import ttk
import threading
import thread
from pdctest.test_lib.hid_util import *
class GUI():
def __init__(self, root):
self.root = root # root is a passed Tk object
self.root.title("GUI--->user instruction window")
self.frame = Frame(self.root)
self.frame.pack()
self.label0 = Label(self.frame, text=" ")
self.label0.configure(width=50, height=1)
self.label0.pack()
self.label = Label(self.frame, text="GUI--->execute a SKP on HS within 3s...")
self.label.configure(width=50, height=1)
self.label.pack()
self.button = Button(self.root, text=" GUI--->then click this button ", command=self.buttonWasPressed, fg = 'black', bg = 'dark orange')
self.button.configure(width=40, height=5)
self.button.pack(pady=25)
def removethis(self):
print("GUI--->in removethis")
self.root.destroy()
def buttonWasPressed(self):
print( "GUI--->inside buttonWasPressed: the button was pressed! " + '\r')
self.removethis()
print("GUI--->leaving buttonWasPressed")
def guiSKP(self):
#root = Tk()
#window = GUI(root)
#root.mainloop()
# modified 6/1, fixes multi-window issue
self.root.mainloop()
class GUI_SKP_Thread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
root = Tk()
window = GUI(root)
window.guiSKP()
def launch_SKP_thread():
print("beginning launch_SKP_thread" + '\r')
thread_SKP = GUI_SKP_Thread("GUI_SKP_Thread")
thread_SKP.start()
print("exiting launch_SKP_thread" + '\r')
def whatsRunning():
t = threading.enumerate()
print("--------------->whatsRunning")
print t
if __name__ == '__main__':
launch_SKP_thread()
# trying to launch 2nd window
whatsRunning()
time.sleep(4)
whatsRunning()
launch_SKP_thread()
答案 0 :(得分:2)
我不确定你要对这个程序做什么。但我确定一件事,就是你试图在同一个 mainloop 中运行两个帧。您在不同位置中定义了两次窗口,这意味着有两个框架/窗口。一旦进入GUI中的guiSKP,一旦在GUI_SKP_Thread中运行。
root = Tk()
window = GUI(root)
所以,你应该改变guiSKP中的文字:
root = Tk()
window = GUI(root)
root.mainloop()
简单地说:
self.root.mainloop()
我添加了self以确保它运行自己的root.mainloop()