gpt4 book ai didi

python - PySide 信号 "duplicating"行为

转载 作者:行者123 更新时间:2023-11-30 23:49:40 25 4
gpt4 key购买 nike

from PySide.QtCore import *

class Eggs(QObject):
evt_spam = Signal()
print "Loaded"

a = Eggs()
b = Eggs()
print a.evt_spam
print b.evt_spam
print a.evt_spam is b.evt_spam

输出:

Loaded
<PySide.QtCore.Signal object at 0xa2ff1a0>
<PySide.QtCore.Signal object at 0xa2ff1b0>
False

“Loaded”仅打印一次(如预期;它是一个类变量),但为什么要创建 2 个信号实例(如果它也是一个类变量)?

最佳答案

它不会在创建类实例时打印,而是在执行类作用域时打印。即使我从未创建过“Test”实例,此代码也会打印“Loaded”。

class Test:
print "Loaded"

如果您想在类初始化时运行代码,请查看__init__()。此代码将在创建实例时打印“Loaded”,而不是在定义类本身时打印“Loaded”。

class Test:
def __init__(self):
print "Loaded"

QT 的 QObject 元类似乎正在重写类属性,以防止在初始化类的新实例时出现重复信号。也许您可以像这样分配属性:

class Test(QObject):
def __init__(self, signal):
self.evt_spam = signal

sig = Signal()
a = Test(sig)
b = Test(sig)

或者这个:

class Test(QObject):
def signal(self, signal):
self.evt_spam = evt_spam
return self

evt_spam = Signal()
a = Test().signal(evt_spam)
b = Test().signal(evt_spam)

关于python - PySide 信号 "duplicating"行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577290/

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