0

新しいスタイルのシグナルとスロットが統合される前の PySide 1.1.2 でアプリケーションを開発しています。Unicode または str 型を受け入れるものを除いて、ほとんどのカスタム シグナルで問題は発生していません。パラメーターのないもの、または他の型は問題なく動作しますが、Unicode または str パラメーターを使用すると、「TypeError: メタ関数 (シグナルを含む) で使用される値の型をメタ型に登録する必要があります: str」というエラーが発生します。声明。

ステートメントの例 (これらはもちろん異なるクラスにあります):

self.emit(QtCore.SIGNAL('setCountType(str)'), self.countType)

self.connect(self.parent, QtCore.SIGNAL('setCountType(str)'), self.setCountType)

# part of a class that inherits from QWidget
def setCountType(self, value):
  self.countType = value

発行ステートメントは、エラーをスローするステートメントです。

4

1 に答える 1

1

PySide 1.1.2 は新しいスタイルをサポートしています。私の場合、「文字列」を使用したシグナルは問題なく動作します。助けが必要な場合は、これを確認してください: http://qt-project.org/wiki/Signals_and_Slots_in_PySide

例:

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

class Window(QMainWindow):
    signal = Signal(str)

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.button = QPushButton()
        self.button.setText("Test")
        self.setCentralWidget(self.button)
        self.button.clicked.connect(self.button_clicked)
        self.signal.connect(self.print_text)

    @Slot()
    def button_clicked(self):
        print('button clicked')
        self.signal.emit("It works!")

    @Slot(str)
    def print_text(self, text: str):
        print(text)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    app.exec_()
    sys.exit(0)
于 2013-08-13T02:42:51.703 に答える