【问题标题】:Skip function when Toplevel is active顶层激活时跳过功能
【发布时间】:2020-02-20 21:26:06
【问题描述】:

如果 Toplevel 窗口当前打开,我会尝试跳过此功能。这是为了避免用户向按钮发送垃圾邮件并创建十亿个额外的通知窗口。或者如果 Toplevel 窗口可以在指定的时间后自动关闭也可以。代码如下。非常感谢任何帮助,因为我对 Python 还是很陌生。谢谢!

def pingClick():
    os.system(
        '-c -H ' + tkvar1.get() + ' -B ' + tkvar2.get() + ' -L ' + tkvar3.get() + ' -V ' + tkvar4.get() + ' -T log.log')
    top = Toplevel()
    top.title("Ping")
    msg = Message(top, text=" - Notice - ")
    msg.pack()
    button = ttk.Button(top, text="Dismiss", command=top.destroy)
    button.pack()

【问题讨论】:

  • 创建全局变量top = None并将Toplevel()赋值给这个全局变量,然后你可以检查它是否是None并创建窗口。当你销毁窗口然后再次分配None
  • 你可以使用top.after(milliseconds, function_name)来运行会破坏milliseconds之后的窗口的函数

标签: python function tkinter toplevel


【解决方案1】:

创建全局变量top = None。当您创建Toplevel() 时,首先检查top 是否为None。如果不是None,则不创建窗口。当您单击按钮销毁窗口时,您必须运行将其设置回top = None 的函数。当您使用按钮[X]关闭窗口时,您也必须这样做

你可以使用top.after(3000, ping_destroy)在3000ms(3s)后关闭窗口

import tkinter as tk

# --- functions ---

def ping_destroy():
    global top

    if top is not None:
        top.destroy()
        top = None

def ping_click():
    global top

    if top is None:
        #os.system('-c -H ' + tkvar1.get() + ' -B ' + tkvar2.get() + ' -L ' + tkvar3.get() + ' -V ' + tkvar4.get() + ' -T log.log')
        top = tk.Toplevel()
        top.title("Ping")

        msg = tk.Message(top, text="Notice")
        msg.pack()

        button = tk.Button(top, text="Dismiss", command=ping_destroy)
        button.pack()

        top.wm_protocol('WM_DELETE_WINDOW', ping_destroy) # run `ping_destroy` when use button [X]

        top.after(3000, ping_destroy) # close after 3000ms (3s)

# --- main ---

top = None

root = tk.Tk()

button = tk.Button(root, text='Ping', command=ping_click)
button.pack()

root.mainloop()

【讨论】:

  • 谢谢!我会试试看!
猜你喜欢
  • 1970-01-01
  • 2011-02-03
  • 2018-09-26
  • 1970-01-01
  • 2017-01-12
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
相关资源
最近更新 更多