Python 如何处理Tkinter应用程序中的后端错误?

Python 如何处理Tkinter应用程序中的后端错误?,python,tkinter,Python,Tkinter,我有一些后端代码连接到Tkinter生成的简单UI。用户界面基本上让用户选择一个文件,然后传递到后端。然后,将从文件中实例化一些对象。该对象有一个方法(在创建对象时运行),用于检查是否存在错误,如果存在错误,它将提示一个对话框,请求用户进行干预(向用户显示一些数据并询问他们如何处理) 我想到了三种处理方法: 创建一个临时的tk.root并从那里打开一个新窗口(不确定重复创建tk.root是否是一个好主意,尤其是该方法运行了100多次) 让该方法使用数据引发自定义异常,并在Tkinter应用程序中

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

我想到了三种处理方法:

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

  • 让该方法使用数据引发自定义异常,并在Tkinter应用程序中处理它(这是一个好的实践吗?)

  • 以某种方式将tk.root传递到对象方法中,并创建一个新窗口作为根窗口的子窗口(我被困在这里,因为该方法是在对象创建时调用的,所以我没有在Tkinter应用程序中显式调用它。)

  • 对不起,如果我听起来很困惑,这是我第一次和Tkinter在一起

    创建一个临时的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\u窗口(x\u窗口)
    来处理此问题。这将停止根窗口的执行,直到关闭
    x\u窗口
    (其中
    x\u窗口
    是您的
    Toplevel
    对象)。

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