在python tkinter

时间:2017-11-30 11:53:21

标签: python tkinter window toplevel

我想要做的是避免打开相同的窗口(如果它已经打开)。 所以,我有一个窗口和一个按钮,以及一个打开另一个窗口的按钮,我想再次单击该按钮,如果第二个窗口已经打开,请将焦点更改为第二个窗口,或者如果它是&#39 ;不开放,打开它。

我尝试使用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 )

希望你能帮助我!

2 个答案:

答案 0 :(得分:1)

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()

答案 1 :(得分:0)

您也可以使用 if 语句执行此操作。这是一种不同的方法,但效果很好,而且非常简单。

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "events": {
        "*": {
          "*": {
            "@id": {
              "e0": { "@(2,value)": "&" },
              "e4": { "@(2,value)": "&" }
            }
          }
        }
      },
      "ids": {
        "*": {
          "@value": "@id"
        }
      }
    }
  }
]