切换使用快捷方式打开的Tkinter窗口

时间:2019-05-23 22:15:18

标签: python tkinter window toggle python-3.7

我还不是一名经验丰富的程序员/脚本编写者,这是我的第一个包含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()

此代码有效,并且可以很好地显示窗口,但是我想找到一种优雅的方法,使用相同的键绑定简单地打开和关闭该窗口。

有什么建议吗?

1 个答案:

答案 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()