【发布时间】:2017-08-08 15:36:02
【问题描述】:
在我的 Tkinter 应用程序中,我有一个按钮可以打开一个显示事件日志的顶级窗口。我需要顶层窗口才能做一些事情:
- 打开时显示以前的日志条目,并使用新条目进行更新。
- 禁用用户移动窗口的能力,同时也使用户能够关闭窗口
- 始终将窗口固定在其右上角,使其右上角位于根窗口的右上角
我想出了#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()
【问题讨论】: