我想用Tkinter UI創建一個python應用程序,並且當前出現以下問題。我正在嘗試設置用戶界面,以使日誌保存在後臺,並且當用戶按下按鈕時,將出現一個「Toplevel
」窗口。該窗口顯示日誌,並實時追加更新。到目前爲止,所有這些工作都正常。只有在不存在的情況下才打開Tkniter Toplevel
但是,我想這樣做,如果Toplevel
窗口是打開的,那麼它不能再次打開。
此外,主程序在運行時會全屏顯示。這意味着如果日誌窗口打開並且用戶再次與主程序交互,則日誌窗口不再可見。有沒有辦法將Toplevel
窗口保持在根窗口之上,即使用戶正在與根窗口進行交互?
這是我一直在擺弄的代碼:
import tkinter as tk
class guiapp(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.value = 0.0
self.alive = True
self.list_for_toplevel = []
btn = tk.Button(self.master, text = "Click", command = self.TextWindow)
btn.pack()
def TextWindow(self):
#if not tk.Toplevel.winfo_exists(self.textWindow):
self.textWindow = tk.Toplevel(self.master)
self.textFrame = tk.Frame(self.textWindow)
self.textFrame.pack()
self.textArea = tk.Text(self.textWindow, height = 10, width = 30)
self.textArea.pack(side = "left", fill = "y")
bar = tk.Scrollbar(self.textWindow)
bar.pack(side = "right", fill = "y")
bar.config(command = self.textArea.yview)
self.alive = True
self.timed_loop()
def timed_loop(self):
if self.alive == True and tk.Toplevel.winfo_exists(self.textWindow):
self.master.after(1000, self.timed_loop)
self.value += 1
self.list_for_toplevel.append(self.value)
self.textArea.delete(1.0, "end-1c")
for item in self.list_for_toplevel:
self.textArea.insert('end', "{}\n".format(item))
self.textArea.see('end')
else:
self.alive = False
if __name__ == "__main__":
root = tk.Tk()
myapp = guiapp(root)
root.mainloop()
我在TextWindow
方法(if not tk.Toplevel.winfo_exists(self.textWindow)
)註釋掉該生產線是什麼,我試圖爲「如果存在的話,不要使用不要讓窗戶「成交。但是運行它,我得到的錯誤:
'guiapp' has no attribute ''textWindow'
我的意思我明白,程序沒有屬性textWindow
存在之前。這就是我首先嚐試使用winfo_exists()
的全部原因。
我想知道如果我應該創建一個isOpen
布爾值,但問題是我不知道如何檢測窗口關閉時。
任何幫助都是有幫助的。