我是'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”窗口,我也将不胜感激。例如,如果打开了第二个窗口,我希望能够关闭第一个窗口,或者至少将其最小化。
答案 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中是否遇到任何问题