PySimpleGUI one_line_progress_meter 在 Windows 上按 X 时不返回 False

Posted

技术标签:

【中文标题】PySimpleGUI one_line_progress_meter 在 Windows 上按 X 时不返回 False【英文标题】:PySimpleGUI one_line_progress_meter does not return False when pressing X on Windows 【发布时间】:2022-01-20 18:32:16 【问题描述】:

在 PySimpleGUI 的 docs 中声明,如果按下取消按钮或窗口标题栏中的 X 按钮,该函数将返回 true。但是,它仅适用于版本 4.55.1 中的取消按钮。

MWE:

import time
import PySimpleGUI as sg

for i in range(1, 200):
    time.sleep(0.1)
    if not sg.one_line_progress_meter(title="test", current_value=i, max_value=200,
                                      no_button=False):
        print('returned false')
        break

我错过了什么吗?

【问题讨论】:

文档中没有关于按下 X 按钮的内容。 @martineau 在我给出的链接中,为返回值编写了以下内容: (bool) RETURN 如果更新成功,则返回 True。如果用户使用 X 或 Cancel 按钮关闭仪表,则为 False。它们是指带有“取消”和“X”的同一个按钮吗? 哎呀,对不起,你是对的。一定是个bug,因为点击X按钮不仅不会导致函数返回False,它也不会关闭窗口。 在 PySimpleGUI GitHub 上发布问题的另一个原因......然后可以跟踪暴露此类问题的问题,并指示为需要采取措施的问题。否则,它只是坐在这里,没有被采取行动......我看到它已经在 GitHub 上登录了......谢谢你也花时间在那里提问! 【参考方案1】:

对于sg.one_line_progress_meter的窗口,定义为disable_close=True,所以这个窗口不能通过点击窗口的Close按钮关闭,只有Cancel按钮对它起作用。

好的,下面的代码展示了破解方式

找到one_line_progress_meter的窗口 设置快测窗口属性DisableCloseFalse
import time
import PySimpleGUI as sg

sg.one_line_progress_meter(title="test", current_value=0, max_value=200, no_button=False)
key='OK for 1 meter'
meter = sg.QuickMeter.active_meters[key]
meter.window.DisableClose = False

for i in range(1, 200):
    time.sleep(0.1)
    if not sg.one_line_progress_meter(title="test", current_value=i, max_value=200, no_button=False):
        print('returned false')
        break

sg.one_line_progress_meter_cancel()

【讨论】:

如果sg.one_line_progress_meter的窗口是这样定义的,那么文档是错误的 在pysimplegui.readthedocs.io/en/latest 的发行说明中,它说 4.29.0 PySimpleGUI 25-Aug-2020 Disable close on one_line_progress_meter。有一个取消按钮可以关闭窗口。 Martin,我认为您是打开 GitHub 问题的人...如果是这样,非常感谢您抽出宝贵时间来做这件事。这对项目非常有帮助!谁打开它...谢谢。 github上的帖子大概是三天前的事了,但是这里才两天,IMO,这个人应该是Doesbaddel。 感谢您的澄清.... 让我摸不着头脑 :-) 我很高兴你很高兴。

以上是关于PySimpleGUI one_line_progress_meter 在 Windows 上按 X 时不返回 False的主要内容,如果未能解决你的问题,请参考以下文章

pysimplegui-第四课:如何设定主题

pysimplegui-第五课:修改主题

PySimpleGui 将多行保存为 .txt

如何在PySimpleGUI中清除窗口?

让 PySimpleGUI 列表框列出对象属性

在 PySimpleGui 中创建自定义按钮