【问题标题】:How to handle backend errors in Tkinter app?如何处理 Tkinter 应用程序中的后端错误?
【发布时间】:2020-04-03 03:29:28
【问题描述】:

我有一些后端代码连接到 Tkinter 生成的简单 UI。 UI 基本上让用户选择一个文件,然后传递到后端。然后,将从文件中实例化一些对象。该对象有一个方法(在对象创建时运行)检查一些错误,如果有一个错误,它会提示一个对话框请求用户干预(向用户显示一些数据并询问他们如何处理)。

我想到了三种方法来处理这个问题:

  1. 创建一个临时的 tk.root 并从那里打开一个新窗口(不确定重复创建 tk.root 是否是个好主意,尤其是该方法运行 100 次以上)

  2. 让方法用数据引发自定义异常并在 Tkinter 应用程序中处理它(这是一个好习惯吗?)

  3. 不知何故将 tk.root 传递给对象方法并创建一个新窗口作为根窗口的子窗口(我被困在这里,因为该方法在对象创建时被调用,所以我没有明确在 Tkinter 应用程序中调用它。)

对不起,如果我听起来很困惑,这是我第一次使用 Tkinter。

【问题讨论】:

  • 如果您需要打开一个额外的窗口,请使用Toplevel() 而不是再次调用Tk()(这会导致各种问题,因为它不仅仅是创建一个窗口)。

标签: python tkinter


【解决方案1】:

创建一个临时的 tk.root 并从那里打开一个新窗口

这绝不是一个好主意,几乎不存在应该创建多个Tk 窗口的情况(因为两个Tk 窗口无法通信)。而是创建 Toplevel() 实例,它们就像弹出窗口。

根据您的问题,我建议创建一个从 Tkinter 继承 Toplevel 类的 ErrorWindow 类。

类似于以下内容:

from tkinter import *

class ErrorWindow(Toplevel):

    def __init__(self, master, error_info, *args, **kwargs):
        super(ErrorWindow, self).__init__(master, *args, **kwargs)
        """
        Display code here
        """

ErrorWindow 的主人将是您拥有的根 Tk 窗口。

尤其是该方法运行了 100 次以上

为确保用户不会被数百个错误窗口淹没,您可以使用root.wait_window(x_window) 处理此问题。这将停止执行根窗口,直到 x_window 关闭(其中 x_window 是您的 Toplevel 对象)。

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多