Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide-无法修改类变量_Python_Qt_Pyside - Fatal编程技术网

Python PySide-无法修改类变量

Python PySide-无法修改类变量,python,qt,pyside,Python,Qt,Pyside,我有一个名为Panel的类,它是从PySide.QtGui.QWidget派生的。我想记录我创建了多少个面板。为了实现这一点,我引入了一个名为count的类变量。类定义片段如下所示: class Panel(QtGui.QWidget): count = 0 def __init__(self, parent=None): super(Panel, self).__init__(parent) Panel.count += 1 pr

我有一个名为Panel的类,它是从PySide.QtGui.QWidget派生的。我想记录我创建了多少个面板。为了实现这一点,我引入了一个名为count的类变量。类定义片段如下所示:

class Panel(QtGui.QWidget):
    count = 0
    def __init__(self, parent=None):
        super(Panel, self).__init__(parent)
        Panel.count += 1
        print(Panel.count)
但当我实例化新面板时,只会打印一系列的零。但我希望能看到一个序列13。。。换句话说,
Panel.count+=1
似乎在没有任何警告或错误的情况下被忽略

当我对另一个从普通Python的对象而不是QWidget派生的类执行相同的操作时,它的工作方式是预期的


什么想法?为什么?这是一个Spybon Python C++绑定生成器pySew使用的工件。这将用

Shiboken.ObjectType
替换通常的元类
类型
(要检查您类型的元类,请使用
打印(Panel.\uu class\uuuuu)
)。元类可以极大地改变python中类的行为,就像它在本例中所做的那样。

如果这不起作用,PySide中就会出现错误

以下是我使用PySide-1.2.1运行代码时得到的结果(稍微更正,因为缺少
self
参数):


问题是它有时有效,但有时无效。
为了缓解这个问题,可以使用全局变量,但这不是一个很好的解决方案。

只是一个有根据的猜测:通过重新分配class属性,QT的垃圾收集器中可能会发生一些奇怪的行为。您观察到的行为可能与。

代码片段已编辑:缺少self作为第一个init参数。感谢ekhumoro的关注。我还纠正了测试中缺少的
self
,但也得到了0,就像OP一样(使用PySide-1.2.1和Python3.3)用1.2.1重新检查一样,它仍然存在。bug可能在Shiboken而不是PySidethough@Joe. 是的,关于Shiboken,你可能是对的,我想这可能只是一个“错误特征”,而不是一个bug。如果再次出现这种情况,您介意检查一下您使用的是哪个版本的Shiboken吗?
>>> from PySide import QtGui
>>> app = QtGui.QApplication([])
>>> class Panel(QtGui.QWidget):
...     count = 0
...     def __init__(self, parent=None):
...         super(Panel, self).__init__(parent)
...         Panel.count += 1
...         print(Panel.count)
... 
>>> p1 = Panel()
1
>>> p2 = Panel()
2
>>> p3 = Panel()
3
>>> Panel.count
3