Python 3 Tkinter - Попытка остановить открытие нескольких окон одной кнопкой - PullRequest
0 голосов
/ 14 мая 2018

У меня есть кнопка, чтобы открыть новое окно в моем коде, и я пытался заставить кнопку открыть новое окно с именем "newest_release_window", имея в виду 2 вещи:

  • Если «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)

Примечание: это не полный код, я просто собрал самые важные части, чтобы понять, в чем проблема.

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете установить bool, определяющий, открыто ли окно или нет, и если это так, тогда вызовите метод lift() в экземпляре tkinter.Tk или tkinter.Toplevel.

Проверкаесли окно существует: Если есть класс root над окном newest_release, вы можете проверить наличие hasattr(base_class, 'newest_release').Если нет, то вы можете настроить окно, подобное этому global newest_release, как глобальную переменную, чтобы вы могли получить к нему доступ вне функции.Тогда вы можете создать код, подобный этому:

if 'newest_release' in globals():
    newest_release.lift()

или

if hasattr(base_class, 'newest_release'):
    newest_release.lift()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...