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

时间:2019-05-16 14:30:44

标签: python tkinter

我想创建一个Button,当按下它时,它会打开一个新的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()

所以我想在一个新窗口仍处于打开状态时停用按钮b

谢谢。

1 个答案:

答案 0 :(得分:3)

首先想到几种不同的方式。

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

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

此方法意味着现在将焦点放在创建的窗口上,当聚焦的窗口被破坏时,您将可以再次与其他窗口进行交互。

另一种方法是让函数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()

请注意,由于您的函数现在需要输入,因此您需要使用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)