Tkinter - Как отключить кнопку при открытии окна - PullRequest
0 голосов
/ 01 марта 2020

Я новичок в библиотеке 'Tkinter' , и я хотел знать, как отключить кнопку при открытии нового окна. Например, если нажата кнопка в главном окне, откроется новое окно, и все кнопки в главном окне будут отключены. После закрытия окна кнопки должны быть снова включены.

Вот пример моего кода:

from tkinter import *

root = Tk()

def z():
    w = Toplevel()

    bu = Button(w, text = "Click!", font = 'bold')
    bu.pack()

b = Button(root, text = "Click!", command = z)
b.pack()

root.mainloop()

Дополнительно: Буду также признателен если бы кто-то мог сказать мне, как закрыть окно 'root', не закрывая всю программу Tkinter. Например, если открыто вторичное окно, я бы хотел закрыть первое окно или хотя бы свернуть его.

1 Ответ

0 голосов
/ 01 марта 2020

Вы можете скрыть окно

root.withdraw()

# or 

root.iconify()

и показать снова

root.deiconify()

Чтобы отключить кнопку

b['state'] = 'disabled' 

Чтобы включить кнопку

b['state'] = 'normal'

РЕДАКТИРОВАТЬ: , как @ acw1668 отметил в комментарии, ему нужно win.protocol() для запуска close_second, когда пользователь использовал кнопку закрытия [X] в строке заголовка

import tkinter as tk # PEP8: `import *` is not preferred

#--- functions ---

def close_second():
    win.destroy()

    b['state'] = 'normal'

    root.deiconify()

def open_second():
    global win

    b['state'] = 'disabled'
    #root.iconify()
    root.withdraw()

    win = tk.Toplevel()

    win_b = tk.Button(win, text="Close Second", command=close_second)
    win_b.pack()

    # run `close_second` when user used closing button [X] on title bar
    win.protocol("WM_DELETE_WINDOW", close_second)

# --- main ---

root = tk.Tk()

b = tk.Button(root, text="Open Second", command=open_second)
b.pack()

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