tkinter解决子窗口已打开就不可再次创建新窗口实现方法

前言

近期发现编写的tkinter桌面小程序点击子窗口总是能新建出来,然后想着去做一个判断,如果其窗口已经打开了就不给他再次新建窗口,然后百度了很多人的方法,发现不适用于toplevel子窗口的判断,所以自己琢磨了一个判断方法

判断方法

下面展示子窗口判断窗口是否打开,在初始方法init中定义一个ename的变量为他赋值为1;

// 子窗口实现类
class e360:
    def __init__(self):
        self.ename = 1

    def close(self):
        self.top.destroy()
        self.ename = 1
        print(self.ename)

    def e360windows(self):
        if self.ename == 1:
            self.top = tk.Toplevel()
            self.top.title("E360相关操作")
            topscreenwidth = window.winfo_screenwidth()
            topscreenheigth = window.winfo_screenheight()
            self.top.geometry('530x150+%d+%d' % ((topscreenwidth - 1500) / 2, (topscreenheigth - 150) / 2 - 150))
            self.top.resizable(0, 0)
            self.ename = 0
            print(self.ename)
            self.top.protocol('WM_DELETE_WINDOW', lambda: e360.close(self))
        else:
            messagebox.showinfo(title='提示', message='窗口已经打开')

定义button点击调用e360类下的e360windows方法,通过button调用后将值赋值成0,这时候判断生效就不会再次打开窗口,而是通过messagebox方法提示李已经打开了窗口
这样做我们还要实现窗口关闭后再次打开仍然还能给我们打开,因为窗口关闭是tk去调用protocol方法去关闭的,所以我们定义self.top.protocol(‘WM_DELETE_WINDOW’, lambda: e360.close(self))方法去监听窗口关闭事件,监听到关闭窗口事件后去调用类下面的close方法,将ename定义成1,再调用destory方法关闭窗口,此时就可以实现窗口的开关仅可打开一个子窗口的方法

// 必须实例化类,不然会提示方法缺少self参数
e360main = e360()
# 定义e360小工具按钮及位置
qsbt = tk.Button(window, text='发货', font=('Arial', 15), width=10, height=1,command=e360main.e360windows)

结语

HAVE A NICE DAY

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值