2012-08-10 30 views
5

Pyside ile bir QComboBox kullanarak, sinyali nasıl bağlayacağımı ve gönderdiği endeksi nasıl kullanacağımı biliyorum. Ama unicode argümanı ne olacak? Kombobox'tan dizgiyi isteyen bir şeye bağlanmayı tercih edersem, bu mümkün mü?Aşırı yüklenmiş pysid sinyalleri (QComboBox)

Gönderen: http://www.pyside.org/docs/pyside/PySide/QtGui/QComboBox.html#PySide.QtGui.QComboBox

Her üç sinyalleri iki sürümü, bir PySide.QtCore.QString argüman ile bir ve bir int bağımsız değişkenle birinde mevcuttur.

Sinyaller

def activated (arg__1) 
def activated (index) 

PySide.QtGui.QComboBox.activated (indeks) Parametreler: index - PySide.QtCore.int

PySide.QtGui.QComboBox.activated Parametreler (1 arg_) : arg _1 - unicode

Düzelt: Bazı kodlar.

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

Bu kod bana bir dizin verir. Soru, dokümanlardaki unicode dizesinin nasıl alınacağıydı.

cevap

12

Sorunun tam olarak ne olduğunu anlamıyorum.

QComboBox.activated sinyalinin iki sürümü vardır. One, seçilen öğenin dizinini verir, other one size metnini verir.

aşağıdaki do PySide aralarında seçmek için:

a_combo_box.activated[int].connect(some_callable) 

a_combo_box.activated[str].connect(other_callable) 

ikinci satır muhtemelen bu yüzden unicode ile str yerine, Python 2'de bu şekilde çalışmaz. Pyside dokümantasyon hala oldukça olacağına dair belirsizliklerin olası olduğu için, genel (C++) Qt belgeleri kullanmak

Not: her yerde bu arg__1 s görmeye devam ... Python için
"Çevriliyor" çok zor olmamalı. Sadece QString'un str (ya da Python 2'de unicode) olduğunu unutmayın; bu arada, kodumun Python'un tüm sürümlerinde çalışmasını seviyorum, bu yüzden genellikle Py3'teki str ve Py2'de unicode adında bir text takma adı kullanıyorum); long, short, vs., int; double, float; QVariant tamamen önlenmiştir, sadece herhangi bir veri tipinin oradan geçebileceği anlamına gelir; ve böylece ...

2

Teşekkürler Oleh Prypin! Yanıtınız, PySide belgelerinde yer alan belirsiz arg1 ile karşılaştığımda bana yardımcı oldu.

Hem combo.currentIndexChanged [str] hem de combo.currentIndexChanged [unicode] 'ı test ettiğimde, her sinyal geçerli dizin metninin unicode sürümünü gönderdiler.

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

çıkan çıkışı: Ben de basestring bir hata IndexError: Signature currentIndexChanged(PyObject) not found for signal: currentIndexChanged atmak edeceğini doğruladı

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

İşte davranışı gösteren bir örnek. Pyside str/unicode (her ikisi de unicode dönüşür) (bu double gibi) anlamına gelir int, float, ve bool ayırt etmek için görünür, ancak tüm diğer piton tipi sinyali imzaları amacıyla PyObject olarak çözümlenir.

Birisine yardım etsin!

İlgili konular