Python 3 Tkinter - 尝试通过一个按钮阻止多个窗口打开

Sim*_*uto 6 python tk-toolkit tkinter python-3.x

我有一个按钮可以在我的代码上打开一个新窗口,我一直在尝试使该按钮打开一个名为“newest_release_window”的新窗口,并考虑到两件事:

  • 如果“newest_release_window”未打开,请打开该窗口。
  • 如果“newest_release_window”已打开,则将焦点设置在该窗口上,但不要打开新窗口。

不幸的是,它变得太复杂了,我一生都无法弄清楚如何去做。问题是我无法让代码检测“newest_release_window”是否打开,并据此更改变量。

welcome_window = Tk()
welcome_window.title("Games R Us")
welcome_window.geometry("360x350")
welcome_window.configure(bg = "gold")
currentDisplay = 10

newest_release_windowtracker = 0

gui_font_5 = ("Helvetica", 5, "bold")
gui_font_10 = ("Helvetica", 10, "bold")
gui_font_15 = ("Helvetica", 15, "bold")
gui_font_20 = ("Helvetica", 20, "bold")
space_between = (5)
button_variable = IntVar()

def newwindow_newest_release():
    global newest_release_windowtracker
    newest_release_window = Tk()
    newest_release_window.title("Games R Us")

    newest_release_window.geometry("360x350")
    newest_release_window.configure(bg = "greenyellow")
    currentDisplay = 10

    display = Label(newest_release_window, text="Humm, see a new window !", 
    bg ="limegreen")
    display.pack()

    newest_release_window.withdraw()

    if newest_release_windowtracker == 0:
        newest_release_window.deiconify()
        newest_release_windowtracker = 1
    elif newest_release_windowtracker == 1:
        newest_release_window.focus_set()
    elif newest_release_window.winfo_exists == 0:
        newest_release_window = Tk()

ww_newest_release = Button(welcome_window,
        text = "Newest Release", bg = "goldenrod", font = "Helvetica 10", 
        width = 12, command = newwindow_newest_release)
Run Code Online (Sandbox Code Playgroud)

注意:这不是完整的代码,我只是抓住了最重要的部分来说明问题可能是什么。

Jak*_*áha 0

您可以设置一个 bool 定义窗口是否打开,如果打开,则调用orlift()实例上的方法。tkinter.Tktkinter.Toplevel

检查窗口是否存在:如果窗口上方 存在newest_release类,则可以检查hasattr(base_class, 'newest_release'). 如果没有,那么您可以将这样的窗口设置global newest_release为全局变量,以便您可以在函数外部访问它。然后你可以创建这样的代码:

if 'newest_release' in globals():
    newest_release.lift()
Run Code Online (Sandbox Code Playgroud)

或者

if hasattr(base_class, 'newest_release'):
    newest_release.lift()
Run Code Online (Sandbox Code Playgroud)