0

次の PySide Qt Python の例を実行しようとしています (コードはこの質問の下部にあります)。

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

次のようなエラーが表示されます。

ASSERT: ファイル /tmp/pyside-gUBW/pyside-qt4.8+1.1.2/libpyside/signalmanager.cpp の「pyMethod」、444 行目

なぜこれが起こっているのか、私はMac OS X 10.8.3を使用してコードをそのまま実行しています。Python 2.7.4、qt、pyside を HomeBrew 経由でインストールしました。

どんな助けでも大歓迎です!

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_()

シグナルマネージャー.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;
4

2 に答える 2

1

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

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

PySide (または PyQt) シグナルとスロットの基本

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

これらのリンクからいくつかのアイデアが得られることを願っています。pyqt パーサーはおそらくシグナルとスロットのリンクに苦労しているため、不平を言っています。

connectコードに print ステートメントをいくつか挿入して、問題をコードの 1 行 (おそらく呼び出しの 1 つ) に切り分けます。次に、実行していることを機能するものに単純化し、次にやりたいことを構築します。

それが役立つことを願っています。

于 2013-05-20T21:56:39.377 に答える
0

で対応する YouTube ビデオを見た後、修正を見つけました。

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

実際、ビデオはこのクラッシュを非常に明確に説明しています。ビデオを見ずに例を試しただけです。

信号を修正するには、"atzero(int, int)"として定義する必要があります。そうしないと、アプリケーションが動作しません。

于 2013-05-21T18:53:44.530 に答える