Tkinter-窗口打开时如何禁用按钮

时间:2020-02-29 22:47:11

标签: python python-3.x tkinter tk

我是'Tkinter'库的新手,我想知道在打开新窗口后如何禁用按钮。例如,如果单击主窗口上的按钮,则将打开一个新窗口,并且将禁用主窗口上的所有按钮。关闭窗口后,应重新启用按钮。

这是我的代码示例:

opTotal = op_approach_total()
opTotal
#                 EventNumberBDT  EventNumberNN       BDT        NN
# EventNumberBDT        1.000000       0.992846 -0.026130  0.023623
# EventNumberNN         0.992846       1.000000 -0.023411  0.022093
# BDT                  -0.026130      -0.023411  1.000000 -0.026454
# NN                    0.023623       0.022093 -0.026454  1.000000

opSub = op_approach_split()
opSub
#                 EventNumberBDT  EventNumberNN       BDT        NN
# EventNumberBDT        1.000000       0.992846 -0.026130  0.023623
# EventNumberNN         0.992846       1.000000 -0.023411  0.022093
# BDT                  -0.026130      -0.023411  1.000000 -0.026454
# NN                    0.023623       0.022093 -0.026454  1.000000

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

2 个答案:

答案 0 :(得分:0)

您可以隐藏窗口

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

答案 1 :(得分:-2)

欢迎来到Tkinter库。

我做完了为什么要使用“ 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中是否遇到任何问题