【问题标题】:How can pysimplegui give a popup message if the script has crashed?如果脚本崩溃,pysimplegui 如何给出弹出消息?
【发布时间】:2020-01-25 08:47:15
【问题描述】:

我正在使用 pysimplegui 界面设置程序。

该程序基于用户输入。如果输入格式错误或拼写错误,脚本将崩溃。

现在,当脚本崩溃时,GUI 保持打开状态,没有任何错误迹象。

有没有办法显示弹出警告并告诉用户退出界面并重新启动脚本?

【问题讨论】:

  • 使用 try/except 块捕获错误,这样您的程序就不会崩溃。当错误被捕获时,您总是可以显示一个弹出窗口。您必须进行输入验证,以使程序不会崩溃。这是 GUI 开发的基本概念。使用简单的演示程序可能会崩溃是可以的,但对于任何实际情况,您必须添加错误检查。
  • 谢谢你!这就是解决办法???我已经为多种预期输入错误创建了带有中断的弹出窗口,但需要针对意外错误的最终安全解决方案。 ??????
  • 查看我发布的关于“意外错误的最终安全解决方案”的答案。简单的方法是将事件循环放入 try 块中。

标签: popup pysimplegui


【解决方案1】:

最近我一直在为系统托盘中运行的脚本或连续运行的小部件添加更大规模的崩溃处理。这类程序没有系统控制台。

此示例在发生问题时显示 2 个窗口。一个是“错误弹出窗口”,另一个打印到“调试窗口”。使用调试窗口的优点是您可以从中复制和粘贴。您可以根据自己的喜好选择其中之一。

import traceback
import PySimpleGUI as sg

layout = [  [sg.Text('My Window')],
            [sg.Input(key='-IN-'), sg.Text(size=(12,1), key='-OUT-')],
            [sg.Button('Go'), sg.Button('Exit')]  ]

window = sg.Window('Window Title', layout)

try:
    while True:             # Event Loop
        event, values = window.read()
        window.bad()
        print(event, values)
        if event in (None, 'Exit'):
            break
        if event == 'Go':
            window['-OUT-'].update(values['-IN-'])
    window.close()
except Exception as e:
    tb = traceback.format_exc()
    sg.Print(f'An error happened.  Here is the info:', e, tb)
    sg.popup_error(f'AN EXCEPTION OCCURRED!', e, tb)

【讨论】:

    【解决方案2】:

    以下代码将检查给定的输入是否为数字并给出一个 opup 说(数字或不是数字):

    import PySimpleGUI as sg
    layout = [[sg.Text('Check if number or not')],
              [sg.Input()],
              [sg.Button('Check'), sg.Button('Exit')]]
    window = sg.Window('Checker', layout)
    while True:
        event, values = window.read()
        if event in  (None, 'Exit'):
            break
        if event == 'Check':
            try:
                int(values[0])
                sg.Popup('It is a number')
            except:
                sg.Popup('Not a number')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2018-02-06
      • 2016-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多