簡體   English   中英

在python 2.7中管理2個Tkinter線程

[英]manage 2 Tkinter Threads in python 2.7

我正在使用Python 2.7中的Tkinter來開發應用程序,以簡化操作:

from Tkinter import *

class rootWindow(Thread):
    def __init__(self):
        Thread.__init(self)
        self.root = Tk()
        self.button = Button(self.root,text="Execute",command=self.exec)
        self.start()
        self.join()

    def run(self):
        self.root.mainloop()

    def exec(self):
        # instruction 1
        # instruction 2
        # ...
        # End instructions

問題是exec()函數需要花費一些時間(因為它修改的是Excel文件)。

我想在exec()函數執行其工作的同時運行第二個窗口(帶有“請稍候”動畫或進度條等exec() 所以我創建了:

class waitWindow(Thread):
    def __init__(self):
        Thread._init__(self)
        self.wait = Tk()
        self.pb = ttk.Progressbar()
        self.pb.pack()
        self.start()

    def run(self):
        self.wait.after(16000, self.des)
        self.wait.mainloop()

    def des(self):
        self.wait.destroy()

我在執行exec()函數之前調用了此線程。 啟動很好,但是我在第二個線程中經過16000 ms之后無法停止第二個線程。

有任何想法嗎? 如何在16000毫秒內停止第二個線程? 提前致謝!

您的代碼有兩個問題。 首先是所有tkinter代碼必須在同一線程中運行,理想情況下,這就是主線程。 處理excel文件的代碼是應該在另一個線程中的代碼。

其次,如果您需要多個窗口,則第二個及后續窗口必須是Toplevel實例,而不是Tk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM