按下按钮 tkinter Python 后打开一个新窗口

Luc*_*cas 1 python tkinter

我想创建一个按钮,在按下时打开一个新的 tkinter 窗口。我已经在另一篇文章中找到了解决方案,但在此示例中,我想在打开新窗口时停用该按钮。这是我所拥有的(测试代码):

import Tkinter as tk

def create_window():
    window = tk.Toplevel(root)

root = tk.Tk()
b = tk.Button(root, text="Create new window", command=create_window)
b.pack()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

所以我想b在新窗口仍然打开时停用该按钮。

谢谢。

Mat*_*ewG 5

首先想到的有几种不同的方法。

一种方法是禁用与整个窗口的交互,这可以通过.grab_set()在新创建的窗口上使用该方法来完成。

def create_window():
    window = tk.Toplevel(root)
    window.grab_set()
Run Code Online (Sandbox Code Playgroud)

这个方法意味着创建的窗口现在被聚焦,当被聚焦的窗口被销毁时,你将再次能够与其他窗口交互。

另一种方法是让您的功能create_window()将按钮作为输入,然后.configure(state="disabled")在按钮上使用

def create_window(button):
    window = tk.Toplevel(root)
    button.configure(state="disabled")

root = tk.Tk()
b = tk.Button(root, text="Create new window", command=lambda: create_window(b))
b.pack()
Run Code Online (Sandbox Code Playgroud)

请注意,由于您的函数现在需要输入,因此您需要使用它,command= lambda:create_window(b)因此在create_window()创建按钮时不会运行。

但是现在您必须编写另一个函数来将按钮状态更改回.configure(state="normal")新窗口被销毁时的状态。例如

def create_window(button):
    window = tk.Toplevel(root)

    def on_close():
        button.configure(state="normal")
        window.destroy()

    button.configure(state="disabled")

    window.protocol("WM_DELETE_WINDOW", on_close)
Run Code Online (Sandbox Code Playgroud)