当前位置: 首页 > 知识库问答 >
问题:

如何禁用按钮时,窗口打开

邓仲卿
2023-03-14

我是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个答案

姜淇
2023-03-14

欢迎来到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方面有什么问题吗

曹茂材
2023-03-14

你可以隐藏窗口

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()
 类似资料:
  • 作为我程序的一部分,我需要有一个按钮,当用户单击它时,它会打开一个新窗口。 嗯,我想我应该有一个类来创建框架并按按钮调用它。但我不知道该怎么开始。我刚刚在程序中找到了我的按钮,但它不起作用。有人能告诉我怎么做吗?或对其进行编码。

  • 我有一个弹出窗口,里面有一个输入。弹出窗口的创建如下所示: 这一切都很有效,可以通过输入。当用户点击android手机上的后退按钮时,问题就出现了。后退按钮关闭弹出窗口。这不应该发生,因为用户的意图是在与弹出窗口进行交互之前无法继续。 现在,我们当然可以将弹出视图的焦点设置为,以禁止通过后退按钮解除:

  • 作为Java的新手,多年的iOS和。NET的经验,我发现这是非常令人困惑。我想要的是一个非常简单的对话框(从主窗口调用),带有OK和Cancel按钮。单击“确定”时,它会执行一些操作,然后关闭对话框。单击“取消”时,它只会取消对话框。 然而,使用SWT shell对话框类来实现这一点并不明显。如何获得一个按钮来关闭对话框,并将执行返回到主窗口?

  • 问题内容: 我遇到的情况是,单击按钮打开带有搜索结果的新浏览器窗口。 有什么方法可以连接并聚焦到新打开的浏览器窗口吗? 并使用它,然后返回到原始(第一个)窗口。 问题答案: 您可以在以下窗口之间切换:

  • 我正在使用Pygame模块制作一个简单的游戏。我需要Tkinter窗口与Pygame窗口一起打开。 每当我试图打开两个窗口时,第二个窗口只有在我杀死第一个窗口后才会打开。 现在,我能想到的唯一解决方案是使用多线程。但是,我无法实现它。 我该怎么做呢?我真的很感激这里的帮助。谢谢你!