gpt4 book ai didi

python - 如何在 tkinter 中使无声异常变得更响亮?

转载 作者:太空狗 更新时间:2023-10-29 16:54:07 26 4
gpt4 key购买 nike

如果我从终端运行以下代码,我会在终端中收到一条有用的错误消息:

import Tkinter as tk

master = tk.Tk()

def callback():
raise UserWarning("Exception!")

b = tk.Button(master, text="This will raise an exception", command=callback)
b.pack()

tk.mainloop()

但是,如果我在没有终端的情况下运行它(例如,通过双击图标),错误消息将被抑制。

在我真实的、更复杂的 Tkinter 应用程序中,我喜欢 GUI 有点抗崩溃。我不喜欢我的用户很难给我有用的反馈来修复由此产生的意外行为。

我该如何处理?有没有一种标准方法可以在 Tkinter 应用程序中公开回溯或标准错误或诸如此类的东西?我正在寻找比将 try/except 无处不在更优雅的东西。

编辑:Jochen Ritzel 在下面给出了一个很好的答案,弹出了一个警告框,并提到将它附加到一个类。只是为了明确这一点:

import Tkinter as tk
import traceback, tkMessageBox

class App:
def __init__(self, master):
master.report_callback_exception = self.report_callback_exception
self.frame = tk.Frame(master)
self.frame.pack()
b = tk.Button(
self.frame, text="This will cause an exception",
command=self.cause_exception)
b.pack()

def cause_exception(self):
a = []
a.a = 0 #A traceback makes this easy to catch and fix

def report_callback_exception(self, *args):
err = traceback.format_exception(*args)
tkMessageBox.showerror('Exception', err)

root = tk.Tk()
app = App(root)
root.mainloop()

我剩下的困惑:Jochen 提到了在不同框架中具有不同异常报告功能的可能性。我还不知道该怎么做。这很明显吗?

最佳答案

report_callback_exception 可以做到这一点:

import traceback
import tkMessageBox

# You would normally put that on the App class
def show_error(self, *args):
err = traceback.format_exception(*args)
tkMessageBox.showerror('Exception',err)
# but this works too
tk.Tk.report_callback_exception = show_error

如果您没有将 Tkinter 导入为 tk,则执行

Tkinter.Tk.report_callback_exception = show_error

关于python - 如何在 tkinter 中使无声异常变得更响亮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com