在我的Tkinter應用程序中,我有一個按鈕,打開一個顯示事件日誌的Toplevel窗口。有幾件事我需要Toplevel窗口能夠做到:Tkinter Toplevel窗口不可移動
- 打開時顯示以前的日誌條目,以及用新的日誌條目更新。
- 禁用用戶的移動窗口周圍,同時能力也使能關閉窗口
- 用戶有窗口總是與它固定的右上角處於根窗口的右上角
我想出了#1。我可以打開窗口並顯示以前的條目,並在窗口打開時更新這些條目。我的問題是#2和#3。
對於#2我不知道如何禁用用戶移動窗口的能力。我假定這也可以禁用用戶的,所以我不知道如何保持這一功能完好,關閉窗口的能力。也許有一個按鈕self.quit()
作爲它的命令?
至於#3,我不知道如何去做這件事。也許我喜歡谷歌搜索,但我似乎無法找到如何做到這一點。
這是我現在的代碼,它能夠正確實現功能#1。
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):
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()
root.geometry("800x480")
myapp = guiapp(root)
root.mainloop()
這基本上是我在找的。非常感謝你:) – Skitzafreak
@Skitzafreak:我已經制定出一些錯誤與如何檢查是否存在窗口。我只是更新了我的答案,以防止由於某些if語句而發生的錯誤。如果您對更新後的代碼有任何疑問,請告知我們。 –