2016-11-22 1 views
1

PyQtは、私はcustomwidgetクラスは、後でListwidgetに追加する例インスタンスである2ラベル(タイトル& DESC)で構成させる...私はPythonとPyQtは/ pysideに新しいですListWidget

を特定の値を取得します...ここ

は、完全なクリーンなコード(pysideマヤ)

import PySide.QtCore as qc 
import PySide.QtGui as qg 

class CustomQWidget (qg.QWidget): 
    def __init__ (self, parent = None): 
     super(CustomQWidget, self).__init__(parent) 
     self.textQVBoxLayout = qg.QVBoxLayout() 
     self.titleLabel = qg.QLabel() 
     self.description = qg.QLabel() 
     self.textQVBoxLayout.addWidget(self.titleLabel) 
     self.textQVBoxLayout.addWidget(self.description) 
     self.setLayout(self.textQVBoxLayout) 
    def setTitle (self, text): 
     self.titleLabel.setText(text) 
    def setDescription (self, text): 
     self.description.setText(text) 

class example_ui(qg.QDialog): 
    def __init__(self): 
     qg.QDialog.__init__(self) 
     self.myQListWidget = qg.QListWidget(self) 
     self.myQListWidget.currentItemChanged.connect(self.getTitleValue) 
     self.myQListWidget.setGeometry(qc.QRect(0,0,200,300)) 
     # make instance customwidget item (just one)------ 
     instance_1 = CustomQWidget() 
     instance_1.setTitle('First title') 
     instance_1.setDescription('this is a sample desc') 
     myQListWidgetItem = qg.QListWidgetItem(self.myQListWidget) 
     myQListWidgetItem.setSizeHint(instance_1.sizeHint()) 
     self.myQListWidget.addItem(myQListWidgetItem) 
     self.myQListWidget.setItemWidget(myQListWidgetItem, instance_1) 
    def getTitleValue(self,val): 
     # i make assume something like below but didnt work 
     # print (self.myQListWidget.currentItem.titleLabel.text() 
     return 0 
dialog = example_ui() 
dialog.show() 

は私が選択を変更するとき、私はタイトルとDESC値を得るのですかgetTitleValue機能になりましたでしょうか?

答えて

1

あなたは、リスト項目と対応するウィジェットが同じではないことを覚えておいてください。幸いにも、QListWidgetは彼らを追跡し、あなたがリストアイテム提供する場合、ウィジェット表示にアクセスすることができます:

class example_ui(qg.QDialog): 
    def getTitleValue(self,val): 
     # parameter val is actually the same as self.myQListWidget.currentItem 
     selected_widget = self.myQListWidget.itemWidget(val) 
     print selected_widget.titleLabel.text()  
     return 0 

側の注意点を:私はすべてで実行されるアプリケーションのためのために、メインループを追加する必要がありました:

お時間を
import sys # to give Qt access to parameters 
# ... class definitions etc. ... 
app = qg.QApplication(sys.argv) 
dialog = example_ui() 
dialog.show() 
exec_status = app.exec_() # main loop 
+0

おかげSanyokは、私は、今注意を理解する:私は(あなたがタイプのような)のpythonから直接実行する場合は、メインループを必要とするコードマヤ内側とちょうど罰金を、実行します。ありがとう –

関連する問題