Открываем новое окно после нажатия кнопки tkinter Python - PullRequest
0 голосов
/ 16 мая 2019

Я хотел бы создать кнопку, которая будет открывать новое окно tkinter при нажатии. Я уже нашел решение в другом посте, но в этом примере я хотел бы деактивировать кнопку при открытии нового окна. Вот что у меня есть (тестовый код):

import Tkinter as tk

def create_window():
    window = tk.Toplevel(root)

root = tk.Tk()
b = tk.Button(root, text="Create new window", command=create_window)
b.pack()

root.mainloop()

, поэтому я хотел бы отключить кнопку b, пока новое окно еще открыто.

Спасибо.

1 Ответ

3 голосов
/ 16 мая 2019

Вначале на ум приходит пара разных способов.

Один из способов - просто отключить взаимодействие со всем окном, это можно сделать с помощью метода .grab_set() во вновь созданном окне..

def create_window():
    window = tk.Toplevel(root)
    window.grab_set()

Этот метод означает, что созданное окно теперь сфокусировано, когда сфокусированное окно будет уничтожено, вы снова сможете взаимодействовать с другими окнами.

Другим способом было быпусть ваша функция create_window() возьмет кнопку в качестве входа, затем используйте .configure(state="disabled") на кнопке

def create_window(button):
    window = tk.Toplevel(root)
    button.configure(state="disabled")

root = tk.Tk()
b = tk.Button(root, text="Create new window", command=lambda: create_window(b))
b.pack()

Обратите внимание, что поскольку ваша функция требует ввода, вам нужно использовать command= lambda:create_window(b), так чтотогда create_window() не запускается при создании кнопки.

Однако теперь вам придется написать другую функцию, которая изменит состояние кнопок обратно на .configure(state="normal"), когда новое окно будет уничтожено.например,

def create_window(button):
    window = tk.Toplevel(root)

    def on_close():
        button.configure(state="normal")
        window.destroy()

    button.configure(state="disabled")

    window.protocol("WM_DELETE_WINDOW", on_close)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...