【问题标题】:Getting ASSERT error on PySide tutorial example在 PySide 教程示例上出现 ASSERT 错误
【发布时间】:2013-05-22 02:53:44
【问题描述】:

我正在尝试运行以下 PySide Qt Python 示例(代码在此问题的底部):

https://github.com/Deusdies/pythonbo/blob/master/06-sixthTutorial-moresignals.py

我收到一条错误消息:

断言:文件中的“pyMethod” /tmp/pyside-gUBW/pyside-qt4.8+1.1.2/libpyside/signalmanager.cpp,行 444

知道为什么会发生这种情况,我正在使用 Mac OS X 10.8.3 完全按原样运行代码。我通过 HomeBrew 安装了 Python 2.7.4、qt 和 pyside。

任何帮助将不胜感激!

import sys
from PySide.QtCore import *
from PySide.QtGui import *

class ZeroSpinBox(QSpinBox):

    zeros = 0

    def __init__(self, parent=None):
        super(ZeroSpinBox, self).__init__(parent)
        self.connect(self, SIGNAL("valueChanged(int)"), self.checkzero)

    def checkzero(self):
        if not self.value():
            self.zeros += 1
            self.nulls = 5
            self.emit(SIGNAL("atZero"), self.zeros, self.nulls)

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        dial = QDial()
        dial.setNotchesVisible(True)

        zeroSpinBox = ZeroSpinBox()

        layout = QHBoxLayout()
        layout.addWidget(dial)
        layout.addWidget(zeroSpinBox)
        self.setLayout(layout)

        self.connect(dial, SIGNAL("valueChanged(int)"), zeroSpinBox.setValue)
        self.connect(zeroSpinBox, SIGNAL("valueChanged(int)"), dial.setValue)
        self.connect(zeroSpinBox, SIGNAL("atZero"), self.announce)

        self.setWindowTitle("Signals and Slots")

    def announce(self, zeros, nulls):
        print "Announcing!!!"

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

signalmanager.cpp

我设法在网上找到了一个包含有问题的 signalmanager.cpp 源文件的存储库:

https://github.com/jasonmccampbell/PySide/blob/master/libpyside/signalmanager.cpp#L444

这是第 444 行的摘录:

int SignalManager::callPythonMetaMethod(const QMetaMethod& method, void** args, PyObject* pyMethod, bool isShortCuit)
{
    Q_ASSERT(pyMethod); // This is the line causing the exception?

    Shiboken::GilState gil;
    PyObject* pyArguments = 0;

【问题讨论】:

  • PySide 上的开发更新开始看起来很慢?
  • 我认为 PyQt 可能有一个更活跃的社区。​​span>
  • 很高兴听到这个消息。昨晚我做了一些功课,并决定,尽管有其他一切,但由于他们的许可,我现在将坚持使用 PySide。如果它给出了无法解决的明确问题,我会切换。

标签: qt pyside


【解决方案1】:

http://qt-project.org/wiki/Signals_and_Slots_in_PySide

http://zetcode.com/tutorials/pyqt4/eventsandsignals/

PySide (or PyQt) signals and slots basics

http://qt-project.org/doc/qt-4.8/signalsandslots.html

我希望其中一些链接能给您一些想法。 pyqt 解析器可能正在努力链接你的信号和插槽,所以它在抱怨。

通过在代码中添加一些打印语句,将问题隔离到一行代码(可能是connect 调用之一)。然后将您正在做的事情简化为可行的事情,然后逐步建立您想要做的事情。

希望对您有所帮助。

【讨论】:

  • 感谢您的链接,问题肯定出在“announce”信号上。我真的看不出有什么问题,但我肯定会看看你的链接。可悲的是,这是 PySide 网站提供的一个示例,用于“开始”,它是开箱即用的。
【解决方案2】:

在观看了相应的 YouTube 视频后,我找到了解决方法

http://www.youtube.com/watch?v=ooEzOyBiOLo

该视频确实很清楚地解释了这次崩溃,我只是在尝试示例而没有观看视频。

要修复信号,必须将其定义为 "atzero(int, int)" 否则应用程序将无法工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多