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

2023-12-03

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

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 应用程序中公开回溯或 stderr 或其他内容?我正在寻找比到处放置 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

如果你没有import Tkinter as tk, 然后做

Tkinter.Tk.report_callback_exception = show_error
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 tkinter 中使无声异常变得更响亮? 的相关文章

随机推荐

  • 在 Google Tasks API 中使用 Joda-Time 库将字符串转换为日期时间格式

    我有一个日期 时间字符串需要发送到 Google Tasks API 但我不知道如何转换乔达时间图书馆DateTime对象转换为 Java DateTime 对象 我使用 Android 作为平台 该字符串以 2012 07 19 22 0
  • 数组:每个键存储多个值

    我曾经尝试使用相同的键添加两个值 但它不起作用 它超越了旧的价值 是否可以使用相同的键添加多个值 并且在按键检索时 我会得到一个链接列表 我可以迭代该列表以获取所有不同的值 最简单的选择 无论您使用什么地方 array key 替换为 ar
  • Python:获取 URL 路径部分

    如何从 url 获取特定路径部分 例如 我想要一个对此进行操作的函数 http www mydomain com hithere image 2934 并返回 这里 或对此进行操作 http www mydomain com hithere
  • Azure 移动服务 Web Api 上的 SignalR CORS

    我有一个运行 Web Api 和 c 的 Azure 移动服务 并按照中的建议启用了 CORS在 Azure 移动服务 NET 后端启用 CORS然而我现在开始将 SignalR 添加到其中 SignalR 工作正常 但我无法找到如何启用
  • 触发器中的 pragmaautonomous_transaction

    我在一个表上编写了一个触发器 该触发器根据条件从其他表中删除数据 触发器具有 pragmaautonomous transaction 并且触发器按预期工作 但是 我确实想知道将来是否会出现任何问题 比如说数据是否由多个用户 源同时插入等等
  • 防止 D3 中的文本剪切(Javascript 图表)

    我正在 D3 中绘制饼图 但文 本剪辑本身遇到问题 这是我的绘图函数 pie function config var width config width 840 height config height 520 radius Math m
  • jQuery mobile:URL 查询字符串不改变

    我正在使用 jQuery Mobile 并遇到了一些 对我来说 奇怪的行为 我有一堆链接 每个链接都指向同一个 jQM 页面 otherpage 但 URL 查询字符串具有不同的值 例如 otherpage q foo otherpage
  • 如何检测 RichTextBox 中的多行粘贴

    目前我正在开发一个简单的语法荧光笔 但有几个问题 你能帮我一下吗 我有一个类库 其中有一个组件类 一切都在 VB NET 中 这只是一个文件 所以你可以在这里看到它https gist github com 2366507 第 92 行有
  • php hook 核心函数

    我想在执行 或替换标准核心函数之前挂钩 例如我要阻止这两者include and require访问任何脚本 有什么方法可以在没有任何额外的 dll 的情况下实现它吗 或者另一个案例is array myarr 我会勾住array myar
  • Swing 重叠组件

    我在框架中有两个 AWT 组件 面板 A 和面板 B 我希望面板 A 的大小适合框架的高度宽度 并在调整框架大小时保持该大小 但我希望面板 B 与 A 重叠 B 将处于固定位置 0 0 以使其更容易 具有固定的高度和宽度 我不确定需要什么样
  • 实例化一个派生自 MonoBehaviour 的类[重复]

    这个问题在这里已经有答案了 有没有办法实例化从 MonoBehaviour 派生的类 例如下面的示例 而不会收到警告 您正在尝试使用 new 关键字创建 MonoBehaviour 这是不允许的 MonoBehaviours 只能使用 Ad
  • 如何删除/切换元素上的悬停类(单击时翻译)而无需再次移动鼠标?

    如果您单击但不移动鼠标 您将看到按钮的颜色保持为红色 我想要完成的是在您单击并且不移动鼠标后它仍然会删除 切换 hover class jsFiddle 上的示例 function var Btn button Btn hover func
  • CosmosDB + 分组依据

    我需要使用 GROUP BY 条款Azure 数据资源管理器但我认为是不支持的 有人有解决或避免分组的想法吗 此致 最后 Azure Cosmos DB 目前支持GROUP BY在 NET SDK 3 3 或更高版本中 目前尚不支持其他语言
  • Twilio webhook 短信响应格式

    我在我的应用程序中使用 Twilio 并且我有 SMS Webhooks 其中我的 SMS 号码配置了 URL 一切正常 除了 Twilio 在每个请求的日志中向我发送错误 我认为我的应用程序的响应格式不正确 但我在文档中找不到如何使用 J
  • 扩展函数原型

    我希望能够扩展javascript中的函数原型 也就是说 向所有函数添加一个函数 目的是将其转换为一种格式 以便在另一种语言 即 ruby 它只能通过字符串进行通信 在这种特定设置中 之间进行交换 我已经有了一个系统 因此我可以通过定义一个
  • 在 iPhone SDK 中获取我所在位置的海拔高度(距海平面的高度)

    我正在尝试在我的应用程序中获取我所在位置的海拔高度 但每次我尝试altitude的财产CLLocation我得到的对象0 00结果 我用谷歌搜索我的查询 得到了类似的问题here and here 该链接表示 如果我通过 wifi 或手机信
  • 如何使用 JavaScript 打开带有打印对话框的文件

    我想使用 JavaScript 打开一个 Word 文档 并为该打开的文档窗口打开打印对话框 这是我的代码 window open http www tizaq com window print 它可以工作 但是打印对话框是为当前窗口打开的
  • 有什么方法可以使用 4 个点而不是 3 个点来绘制图像(透视扭曲)

    Graphics DrawImage 很好地支持绘制平行四边形 Bitmap destImage new Bitmap srcImage Width srcImage Height using Graphics gr new Graphic
  • Google App Engine app.yaml PHP 脚本参数

    在我的 GAE PHP app yaml 中 我尝试这样做 application myapp version 1 runtime php api version 1 threadsafe yes handlers url sitemap
  • 如何在 tkinter 中使无声异常变得更响亮?

    如果我从终端运行以下代码 我会在终端中收到一条有用的错误消息 import Tkinter as tk master tk Tk def callback raise UserWarning Exception b tk Button ma