Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter-窗口打开时如何禁用按钮_Python_Python 3.x_Tkinter_Tk - Fatal编程技术网

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

Python Tkinter-窗口打开时如何禁用按钮,python,python-3.x,tkinter,tk,Python,Python 3.x,Tkinter,Tk,我是“Tkinter”库的新手,我想知道如何在新窗口打开时禁用按钮。例如,如果单击主窗口上的按钮,将打开一个新窗口,并且主窗口上的所有按钮都将被禁用。关闭窗口后,应再次启用按钮 以下是我的代码示例: from tkinter import * root = Tk() def z(): w = Toplevel() bu = Button(w, text = "Click!", font = 'bold') bu.pack() b = Button(root, te

我是“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”窗口,我将不胜感激。例如,如果辅助窗口打开,我希望能够关闭第一个窗口,或者至少最小化它。

您可以隐藏窗口

root.withdraw()

# or 

root.iconify()
再来一次

root.deiconify()
禁用按钮

b['state'] = 'disabled' 
b['state'] = 'normal'
启用按钮

b['state'] = 'disabled' 
b['state'] = 'normal'
编辑:正如@acw1668在评论中指出的,当用户使用标题栏上的关闭按钮[X]时,需要win.protocol来运行close_秒

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

欢迎来到特金特图书馆

我知道你为什么要用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

root是主窗口,它总是关闭其他子窗口。如果要关闭根目录,请在此之后使用新的mainloopb['state']=“disabled”和b['state']=“normal”root.iconify或root.draw和root.deiconify创建新的根目录窗口Tk。如果通过单击标题栏上的“关闭”按钮关闭顶层目录,则根目录窗口可能不会被取消认证。@acw1668好的一点,我忘了。我添加了win.protocolWM\u DELETE\u窗口,然后关闭