我还不是一名经验丰富的程序员/脚本编写者,这是我的第一个包含UI(tkinter)的项目。
我的键盘上的键绑定到一个打开窗口的功能。 我正在使用类似这样的东西将其绑定到密钥:
root.bind('<s>', popupmsg)
这是我正在调用的函数:
def popupmsg(msg):
global MSGroot
MSGroot = Tk()
lab1.config("test")
lab1= Label(MSGroot, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
MSGroot.title("TIME")
MSGroot.call('wm', 'attributes', '.', '-topmost', '1')
MSGroot.mainloop()
此代码有效,并且可以很好地显示窗口,但是我想找到一种优雅的方法,使用相同的键绑定简单地打开和关闭该窗口。
有什么建议吗?
答案 0 :(得分:0)
我有很多建议,可以使您的代码更好/更优雅。
首先,请勿将
Tk()
窗口用作弹出窗口,而应使用TopLevel()
窗口,两个Tk()
窗口无法传递信息 之间,因此请使用TopLevel()
窗口。
def popupmsg(msg):
global MSGroot
MSGroot = TopLevel(root) # needs the main Tk() window as a master/parent element
lab1.config("test")
lab1= Label(MSGroot, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
MSGroot.title("TIME")
MSGroot.call('wm', 'attributes', '.', '-topmost', '1')
第二,您应该创建类来创建
Tk
TopLevel
窗口,这样可以更好地格式化您的代码,而且效果更好 更改Windows工作方式的功能。
class PopUpMsg(Toplevel):
def __init__(self, master, msg):
super(PopUpMsg, self).__init__(master)
lab1 = Label(self, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
self.title("TIME")
self.call('wm', 'attributes', '.', '-topmost', '1')
# This is now the function you could use to show the popup
def popupmsg(msg):
test_popup = PopUpMsg(root, msg) # This is how you would create the PopUpMsg
test_popup.pack()
root = Tk()
root.mainloop()
最后一次按下它时,窗口将关闭。 再一次,我将使用这个新的
on_close
类的PopUpMsg
方法, 并绑定“ s”。
class PopUpMsg(Toplevel):
def __init__(self, master):
super(PopUpMsg, self).__init__(master)
lab1 = Label(self, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
self.title("TIME")
self.bind('<s>', self.on_close)
def on_close(self):
self.destroy()