gpt4 book ai didi

python - 在 Singleton/Borg 内部调用时 QTimer 未执行

转载 作者:行者123 更新时间:2023-12-01 04:00:47 27 4
gpt4 key购买 nike

我在单例中使用 QTimer 实现了一个计时器。单例是使用 Borg 实现的图案。如果我在 Singleton 的函数内使用单次启动 QTimer,它将不会被执行。在单例之外的函数中进行相同的调用效果很好。

这是代码:

#!/usr/bin/env python
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication


class Borg():
_shared_state = {}
def __init__(self):
self.__dict__ = self._shared_state


class Timers(Borg):
def __init__(self):
Borg.__init__(self)

def update_not_working(self):
QTimer().singleShot(2000, Timers().update_not_working)
print('update not working')


def update_working():
QTimer().singleShot(2000, update_working)
print('update working')

if __name__ == '__main__':
app = QApplication(sys.argv)
print('start timer')
Timers().update_not_working()
update_working()

sys.exit(app.exec_())

输出是(没有错误,没有异常):

start timer
update not working
update working
update working
....

为什么一个调用有效而另一个调用无效?我的 Borg 实现或 QTimer 的使用有问题吗?

最佳答案

update_not_working 中的

print selfupdateworking 中的 print Timers() 显示 Timers 事件循环开始之前的对象与其中的对象不同:

update not working
<__main__.Timers instance at 0xb52162cc>
update working
<__main__.Timers instance at 0xb52162cc>
update working
<__main__.Timers instance at 0xb521650c>
update working
<__main__.Timers instance at 0xb521650c>
update working
<__main__.Timers instance at 0xb521650c>
update working
<__main__.Timers instance at 0xb521650c>

@classmethod 在这里应该有所帮助,因为它允许在实例或类上调用方法,就像在单次语句中一样。

比较:When should I use @classmethod and when def method(self)?

关于python - 在 Singleton/Borg 内部调用时 QTimer 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592311/

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