首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在尝试启动单线程窗口,但有两个正在启动

正在尝试启动单线程窗口,但有两个正在启动
EN

Stack Overflow用户
提问于 2015-05-30 07:20:43
回答 1查看 48关注 0票数 0

我正在尝试启动一个线程窗口,因为我有后台进程正在运行,但两个相同的窗口在同一线程下启动,我不知道为什么。我猜这段代码是可以优化的!感谢您的任何建议。

6/1:我按照建议进行了修改,不在主循环中运行两个窗口,这很有效。第二个部分是,一旦点击按钮,窗口就会被销毁"self.root.destroy()",但如果我试图打开另一个窗口,它将不会打开。在尝试启动新窗口之前,我做了一个检查,只有主线程在运行,所以第一个线程已经消失了。不确定发生了什么,并且我无法在线程运行的情况下进行调试。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2015-05-30 11:41:50

我不太清楚你想用这个程序做什么。但我可以肯定一件事,那就是,您正在尝试在同一个主循环中运行两个frames。您在不同的位置定义了两次窗口,这意味着有两个框架/窗口。一次是在图形用户界面的guiSKP中,一次是在GUI_SKP_Thread中运行。

代码语言:javascript
复制
root = Tk()
window = GUI(root)

因此,您应该将guiSKP中的文本从:

代码语言:javascript
复制
root = Tk()
window = GUI(root)
root.mainloop()

简单地说:

代码语言:javascript
复制
self.root.mainloop()

我添加了self以确保它运行自己的root.mainloop()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30540480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档