单击按钮时如何仅创建 1 个新窗口?特金特

问题描述

我想制作一个按钮,当点击它时会打开一个新窗口(tk.toplevel),有没有办法让按钮只工作一次,(之后点击它只会创建一个新窗口,点击按钮时什么都不做)

从下面的代码中,我可以通过单击按钮制作无限数量的顶级,但我只想点击创建一个

import tkinter as tk

class run:      # pls ignore if there are any syntrax error/spelling because I typed this in stack overflow
    def __init___(self,master)
        button = tk.button(master,text="btn",self.command=make_new)
        button.grid()
    def make_new()
        new = tk.toplevel(master)

master1 = tk.Tk()
i = Run(master1)
master1.mainloop()

*** 我没有放原始代码,因为它有太多的类/函数在这里

*** 这是我提出的另一个问题,其中包含更多代码How to make a tkinter button open only one Toplevel?

解决方法

我对您的代码进行了一些更改,以便当您单击按钮时,它会创建一个顶层,如果您多次单击,则不会创建更多:

import tkinter as tk


class Run:
    def __init__(self,master):
        self.master = master
        self.toplevels = 0
        button = tk.Button(master,text="btn",command=self.make_new)
        button.pack()

    def make_new(self):
        if not self.toplevels:
            new = tk.Toplevel(self.master)
            self.toplevels += 1

master1 = tk.Tk()
i = Run(master1)
master1.mainloop()
,

这里的问题:“循环”迭代对于人类的反应来说太快了,而且一个动作在多次迭代后仍然可以保持活跃。

可能的解决方案/提示 #1

¿可以在 de wait(miliSeconds) 后添加 new = tk.toplevel(master)(或类似函数)吗?我在 Arduino 上遇到了同样的问题,但这是因为“循环”对于人类响应来说太快了,所以您可能需要在打开新窗口后添加一点“等待”(可能是半秒或 1 秒),所以您将只有 1 个新窗口。

可能的解决方案/提示 #2

如果不能添加wait(miliSeconds)函数,可以尝试在main方法中加个flag,进入make_new()方法时询问flag == 0是否有,转进入 1 并继续,如果标志不是 0,只需跳过打开一个新窗口