【问题标题】:How to run a function as soon as GUI started?GUI启动后如何运行功能?
【发布时间】:2017-06-28 13:36:04
【问题描述】:

我需要在 tkinter GUI 可用后立即运行检查功能。我尝试使用以下代码,但出现的 Messagebox 没有响应,我无法按下 OK 按钮。

import tkinter.messagebox as mbox
import tkinter
from tkinter import ttk



class MQ(ttk.Frame):
    def __init__(self, parent, *args, **kwargs):
        ttk.Frame.__init__(self, parent, *args, **kwargs)

        self.root = parent
        self.init_gui()
        if mycheck=True:
            mbox.showinfo("Title","message")

...
...
if __name__ == '__main__':
    root = tkinter.Tk()
    MQ(root)
    root.mainloop()

【问题讨论】:

  • self.init_gui() 中有什么?如果你有另一个 Tk() 实例或无限循环,这可能会导致问题。
  • 不,网格中只有一堆小部件。应用程序在开始时没有那个 mbox 可以正常工作,但我需要向用户显示一个信息对话框,该对话框应该可以访问“self”变量。
  • 您的原始代码中有那个错字吗? if mycheck=True 应该是 == instad 的单个。
  • 不,我复制的时候打错了。但问题不存在。它在 MessageBox 中,仍然卡住且无响应。
  • 主要问题是:如何在没有用户任何操作的情况下,在 GUI 显示后立即运行函数?

标签: python-3.x tkinter ttk


【解决方案1】:

您可以使用after_idle 在 GUI 启动后立即运行某些东西,或者您可以使用after 让它在短暂的时间后运行。两者在显示根窗口之前还是之后运行代码的行为略有不同(这可能取决于平台;我不确定)

import tkinter as tk
from tkinter import messagebox

def say_hello(root, message):
    tk.messagebox.showinfo("Info", message)

root = tk.Tk()
root.after(1, say_hello, root, "Hello, world")

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多