t了解如何在窗口打开时禁用按钮

2022-01-19 00:49:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是'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()

额外:如果有人能告诉我如何在不关闭整个“Tkinter”程序的情况下关闭“root”窗口,我将不胜感激。例如,如果一个辅助窗口打开,我希望能够关闭第一个窗口,或者至少最小化它

2条回答
网友
1楼 ·

欢迎来到特金特图书馆

我知道你为什么要用w了,你可以用root,它就可以工作了

from tkinter import *
root = Tk()

def z():

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

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

root.mainloop()

问我你在python和tkinter方面有什么问题吗

网友
2楼 ·

你们可以把窗户藏起来

root.withdraw()

# or 

root.iconify()

再来一次

root.deiconify()

禁用按钮

b['state'] = 'disabled' 

启用按钮

b['state'] = 'normal'

编辑:如@acw1668在评论中所述,当用户使用标题栏上的关闭按钮[X]时,需要win.protocol()运行close_second

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

相关问题