我是靠谱客的博主 小巧灯泡,这篇文章主要介绍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

最后

以上就是小巧灯泡最近收集整理的关于tkinter解决子窗口已打开就不可再次创建新窗口实现方法的全部内容,更多相关tkinter解决子窗口已打开就不可再次创建新窗口实现方法内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部