0

我想要做的是避免打开同一个窗口,如果它已经打开。所以,我有一个窗口和一个按钮,以及一个打开另一个窗口的按钮,我想再次单击该按钮,如果第二个窗口已经打开,则将焦点更改为第二个窗口,或者如果它没有打开,打开它。

我试过了,secondwindow.winfo_exists()但由于启动第二个窗口的按钮的功能不在第二个窗口函数中,它返回我的第二个窗口没有定义。

除此之外,我添加了第二个按钮来检查是否创建了第二个窗口,而不是再次检查调用相同的函数。

有什么办法可以做到这一点?这是我使用的代码的一部分:

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 )

希望你能帮我!

4

2 回答 2

2

在里面startwind2你必须使用global wind2将窗口分配给全局变量,然后它将在其他函数中可用。

它还需要创建wind2 = None,因此即使在您创建窗口之前变量也将可用。

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()
于 2017-11-30T12:40:18.493 回答
0

您也可以使用 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()
于 2021-07-13T17:04:53.550 回答