首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用快捷方式切换打开的tkinter窗口

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

Stack Overflow用户
提问于 2019-05-23 22:15:17
回答 1查看 330关注 0票数 1

我不是一个有经验的程序员/脚本,这是我第一个包含UI (tkinter)的项目。

我的键盘上有一个键,绑定到一个打开窗口的函数。我用这样的东西把它绑定到键上:

代码语言:javascript
复制
root.bind('<s>', popupmsg)

这是我调用的函数:

代码语言:javascript
复制
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()

,这段代码工作,,并显示窗口很好,但我想找到一种优雅的方式,只需打开和关闭该窗口使用相同的键绑定。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 22:54:53

我会提出许多建议,这将使您的代码更好/更优雅.

首先,不要对弹出窗口使用Tk()窗口,使用TopLevel()窗口,两个Tk()窗口不能相互传递信息,所以使用TopLevel()窗口代替。

代码语言:javascript
复制
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')

其次,您应该创建类以使您的TkTopLevel窗口更好地格式化您的代码,并且对于更改windows的工作方式更有功能。

代码语言:javascript
复制
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()

最后,为了使其如此,当您再次按"s“时,窗口将关闭,我将为这个新的PopUpMsg类创建一个PopUpMsg方法,并将"s”绑定到它。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56283577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档