6

pysideでQComboBoxを使用して、シグナルを接続し、シグナルが送信するインデックスを使用する方法を知っています。しかし、ユニコード引数はどうですか?コンボボックスからの文字列が必要なものに接続したい場合、それは可能ですか?

差出人: http ://www.pyside.org/docs/pyside/PySide/QtGui/QComboBox.html#PySide.QtGui.QComboBox

3つのシグナルはすべて2つのバージョンで存在します。1つはPySide.QtCore.QString引数を持ち、もう1つはint引数を持ちます。

信号

def activated (arg__1)
def activated (index)

PySide.QtGui.QComboBox.activate(index)パラメーター:インデックス– PySide.QtCore.int

PySide.QtGui.QComboBox.activate(arg_ 1)パラメーター:arg _1 – unicode

編集:いくつかのコード。

le = ComboBoxIpPrefix()
le.currentIndexChanged.connect(lambda x....)

このコードは私にインデックスを与えます。問題は、ドキュメントに記載されているUnicode文字列を取得する方法でした。

4

2 に答える 2

13

あなたの質問が正確に何であるかわかりません。

信号には2つのバージョンがありQComboBox.activatedます。1つは選択したアイテムのインデックスを提供し、もう1つはそのテキストを提供します。

PySideでそれらから選択するには、次のようにします。

a_combo_box.activated[int].connect(some_callable)

a_combo_box.activated[str].connect(other_callable)

2行目はPython2ではおそらくこのようには機能しないため、。に置き換えstrunicodeください。

PySideのドキュメントはまだかなりあいまいなので、一般的な(C ++)Qtドキュメントを使用していることに注意してください。Pythonへarg__1
「変換」はそれほど難しくないはずです。QString次のようになることを覚えておいてくださいstr(またはunicodePython 2では、コードをすべてのバージョンのPythonで動作させるのが好きなので、通常はPy3とPy2にあるエイリアスタイプtextを作成します)。、、などになります; になります; 完全に回避されます。これは、任意のデータ型をそこに渡すことができることを意味します。等々...strunicodelongshortintdoublefloatQVariant

于 2012-08-10T13:24:57.520 に答える
2

Oleh Prypinに感謝します!PySideのドキュメントであいまいなarg__1に出くわしたとき、あなたの答えは私を助けてくれました。

combo.currentIndexChanged[str]とcombo.currentIndexChanged[unicode]の両方をテストしたところ、各シグナルは現在のインデックステキストのユニコードバージョンを送信しました。

動作を示す例を次に示します。

from PySide import QtCore
from PySide import QtGui

class myDialog(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(myDialog, self).__init__(*args, **kwargs)

        combo = QtGui.QComboBox()
        combo.addItem('Dog', 'Dog')
        combo.addItem('Cat', 'Cat')

        layout = QtGui.QVBoxLayout()
        layout.addWidget(combo)

        self.setLayout(layout)

        combo.currentIndexChanged[int].connect(self.intChanged)
        combo.currentIndexChanged[str].connect(self.strChanged)
        combo.currentIndexChanged[unicode].connect(self.unicodeChanged)

        combo.setCurrentIndex(1)

    def intChanged(self, index):
        print "Combo Index: "
        print index
        print type(index)

    def strChanged(self, value):
        print "Combo String:"
        print type(value)
        print value

    def unicodeChanged(self, value):
        print "Combo Unicode String:"
        print type(value)
        print value

if __name__ == "__main__":

    app = QtGui.QApplication([])
    dialog = myDialog()
    dialog.show()
    app.exec_()

結果の出力は次のとおりです。

Combo Index
1
<type 'int'>
Combo String
<type 'unicode'>
Cat
Combo Unicode String
<type 'unicode'>
Cat

また、basestringがエラーをスローすることも確認しましたIndexError: Signature currentIndexChanged(PyObject) not found for signal: currentIndexChanged。PySideはintfloat(と呼ばれるdouble)、str/ unicode(両方ともになるunicode)、およびを区別しているように見えますboolが、他のすべてのPythonタイプはPyObject、シグナル署名の目的で解析されます。

それが誰かを助けることを願っています!

于 2014-02-25T06:07:07.987 に答える