1.背景
python内置GUI模块tkinter,实现界面的时候,可能会遇到:
1.主窗体关闭子窗体还存在;
2.多次点击主窗体的按钮,子窗体会重复打开;
如下的代码:
__author__="jn10010537"
import sys
print(sys.version)
#3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)]
import tkinter
def open_window():
win_win = tkinter.Tk()
win_win.geometry('300x300')
label = tkinter.Label(win_win, text='测试:1.主窗体关闭,子窗体也跟着关闭\n2.子窗体不被重复打开')
label.pack(padx=0,pady=100,anchor="w")
win_win.mainloop()
if __name__ == '__main__':
win = tkinter.Tk()
win.title('test')
win.geometry('300x300')
button = tkinter.Button(win, text='点击', font=('Arial', 12), width=10, height=1, command=open_window)
button.pack(padx=0,pady=100,anchor="w")
win.mainloop()
2.解决办法
2.1. 主窗体关闭,子窗体也跟着关闭
通过tkinter.Toplevel()实现关闭主窗口时,自动关闭此窗口;
2.2 . 子窗体不被重复打开
通过设置句柄,控制子窗体不被重复打开;
3.代码
可以参照下面的代码,可能会帮到你解决项目上的问题。
__author__="jn10010537"
import sys
print(sys.version)
#3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)]
import tkinter
handle={}
handle["control"]=1
def open_window():
if handle["control"]:
win_win = tkinter.Toplevel()
win_win.geometry('300x300')
label = tkinter.Label(win_win, text='测试:1.主窗体关闭,子窗体也跟着关闭\n2.子窗体不被重复打开')
label.pack(padx=0,pady=100,anchor="w")
handle["control"] = 0
else:
print("当前,重复无效点击")
if __name__ == '__main__':
win = tkinter.Tk()
win.title('test')
win.geometry('300x300')
button = tkinter.Button(win, text='点击', font=('Arial', 12), width=10, height=1, command=open_window)
button.pack(padx=0,pady=100,anchor="w")
win.mainloop()