检查 Toplevel window 是否从 python tkinter 中的外部函数打开
Check if a Toplevel window is open from outer function in python tkinter
我想做的是避免打开已经打开的 window。
所以,我有一个 window 和一个按钮,以及一个打开另一个 window 的按钮,我想再次单击该按钮,如果第二个 window 它已经打开,则将焦点更改为第二个 window 或者如果它没有打开,请打开它。
我尝试使用 secondwindow.winfo_exists()
但是由于启动第二个 window 的按钮的功能不在第二个 window 功能中,所以 returns 我的secondwindow 未定义。
除此之外,我添加了第二个按钮来检查是否创建了第二个 window,而不是检查再次调用相同的函数。
有什么办法吗?这是我使用的代码的一部分:
def startwind1():
wind1 = tk.Tk()
wind1.title('Window 1')
w1button1 = ttk.Button(wind1,text='Launch Window 2',command=startwind2).pack()
w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2).pack()
wind1.mainloop()
def startwind2():
wind2 = tk.Toplevel()
wind2.title('Window 2')
def checkwind2():
if wind2.winfo_exists() == 1:
print('Window 2 exists')
else:
print('Window 2 not exists )
希望你能帮助我!
在startwind2
里面你必须使用global wind2
将window赋值给全局变量,然后它才能在其他函数中使用。
它还需要创建 wind2 = None
,这样变量甚至在您创建 window 之前就可用了。
import tkinter as tk
from tkinter import ttk
wind2 = None
def startwind1():
#global wind2
#wind2 = None
wind1 = tk.Tk()
wind1.title('Window 1')
w1button1 = ttk.Button(wind1,text='Launch Window 2', command=startwind2)
w1button1.pack()
w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2)
w1button2.pack()
wind1.mainloop()
def startwind2():
global wind2
wind2 = tk.Toplevel()
wind2.title('Window 2')
def checkwind2():
if (wind2 is not None) and wind2.winfo_exists():
print('Window 2 exists')
else:
print('Window 2 not exists')
startwind1()
您也可以使用 if 语句执行此操作。这是一种不同的方法,但效果很好,而且非常简单。
win1 = None
def startwind1():
if wind1 is not None and win1.winfo_exists():
pass
else:
global wind1
wind1 = tk.Tk()
wind1.title('Window 1')
wind1.mainloop()
我想做的是避免打开已经打开的 window。 所以,我有一个 window 和一个按钮,以及一个打开另一个 window 的按钮,我想再次单击该按钮,如果第二个 window 它已经打开,则将焦点更改为第二个 window 或者如果它没有打开,请打开它。
我尝试使用 secondwindow.winfo_exists()
但是由于启动第二个 window 的按钮的功能不在第二个 window 功能中,所以 returns 我的secondwindow 未定义。
除此之外,我添加了第二个按钮来检查是否创建了第二个 window,而不是检查再次调用相同的函数。
有什么办法吗?这是我使用的代码的一部分:
def startwind1():
wind1 = tk.Tk()
wind1.title('Window 1')
w1button1 = ttk.Button(wind1,text='Launch Window 2',command=startwind2).pack()
w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2).pack()
wind1.mainloop()
def startwind2():
wind2 = tk.Toplevel()
wind2.title('Window 2')
def checkwind2():
if wind2.winfo_exists() == 1:
print('Window 2 exists')
else:
print('Window 2 not exists )
希望你能帮助我!
在startwind2
里面你必须使用global wind2
将window赋值给全局变量,然后它才能在其他函数中使用。
它还需要创建 wind2 = None
,这样变量甚至在您创建 window 之前就可用了。
import tkinter as tk
from tkinter import ttk
wind2 = None
def startwind1():
#global wind2
#wind2 = None
wind1 = tk.Tk()
wind1.title('Window 1')
w1button1 = ttk.Button(wind1,text='Launch Window 2', command=startwind2)
w1button1.pack()
w1button2 = ttk.Button(wind1,text='Check if Window 2 exists',command=checkwind2)
w1button2.pack()
wind1.mainloop()
def startwind2():
global wind2
wind2 = tk.Toplevel()
wind2.title('Window 2')
def checkwind2():
if (wind2 is not None) and wind2.winfo_exists():
print('Window 2 exists')
else:
print('Window 2 not exists')
startwind1()
您也可以使用 if 语句执行此操作。这是一种不同的方法,但效果很好,而且非常简单。
win1 = None
def startwind1():
if wind1 is not None and win1.winfo_exists():
pass
else:
global wind1
wind1 = tk.Tk()
wind1.title('Window 1')
wind1.mainloop()