2014-10-05 11 views
8

Ich versuche ein QListWidget zu erstellen, in dem jedes Element ein einfaches Widget ist, das Text und eine Drucktaste enthält. Ich benutze folgendes:QWidget zu QListWidget hinzufügen

itemN = QtGui.QListWidgetItem() 
#Create widget 
widget = QtGui.QWidget() 
widgetText = QtGui.QLabel("I love PyQt!") 
widgetButton = QtGui.QPushButton("Push Me") 
widgetLayout = QtGui.QHBoxLayout() 
widgetLayout.addWidget(widgetText) 
widgetLayout.addWidget(widgetButton) 
widgetLayout.addStretch() 
widget.setLayout(widgetLayout) 
#Add widget to QListWidget funList 
funList.addItem(itemN) 
funList.setItemWidget(itemN, widget) 

Das Problem ist, nichts zeigt sich. Ich erhalte eine Leerzeile, über die ich mit meiner Tastatur navigieren kann, aber sie ist leer. Wenn das Widget nur eine Drucktaste enthält, funktioniert es, so dass es nicht so ist, als ob die Drucktaste alleine Dinge durcheinander bringt. Gibt es Grenzen für die Komplexität von Widgets, die setItemWidget verarbeiten kann? Vielleicht muss ich über die Convenience-Klassen hinausgehen, wie es in einigen der verwandten Beiträge unten vorgeschlagen wird?

Related posts

pyqt adding a widget to a QListWidget
Hinweis die frühere Post einen ähnlichen Titel zu mir hat, scheint aber eine relativ schlecht ausgedrückt Frage zu einem komplexen Pastiche von Code aus QtDesigner (mit einigen benutzerdefinierten Sachen gemischt) zu sein . Es ist überhaupt nicht klar, dass dies eigentlich die Frage ist, die die Person hätte stellen sollen. Während der Titel es wie ein Duplikat erscheinen lässt, ist die Frage (ich bete) nicht.

Ich würde etwas ähnliches über this Post sagen.

QListWidgetItem with Radio Button

QListView/QListWidget with custom items and custom item widgets

Adding Custom Widget to QListWidget in QT click issue in QT?

pyqt adding a widget to a QListWidget

http://www.qtcentre.org/threads/8660-Drawing-a-widget-in-QItemDelegate-s-paint-method

http://developer.nokia.com/community/discussion/showthread.php/211634-Adding-a-button-inside-QListWidgetItem

Antwort

12

Versuchen Sie folgendes:

itemN = QtGui.QListWidgetItem() 
#Create widget 
widget = QtGui.QWidget() 
widgetText = QtGui.QLabel("I love PyQt!") 
widgetButton = QtGui.QPushButton("Push Me") 
widgetLayout = QtGui.QHBoxLayout() 
widgetLayout.addWidget(widgetText) 
widgetLayout.addWidget(widgetButton) 
widgetLayout.addStretch() 

widgetLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) 
widget.setLayout(widgetLayout) 
itemN.setSizeHint(widget.sizeHint())  

#Add widget to QListWidget funList 
funList.addItem(itemN) 
funList.setItemWidget(itemN, widget) 

Wie Sie sehen können, Sie setSizeConstraint auf das Layout und setSizeHint Punkt benötigen.

+0

das funktioniert! Mir ist nicht klar, was passiert. 1) Sobald die Größenbeschränkung eingestellt ist, muss ich wirklich "setSizeHint" auf das Element auch? Es _seems_ das Auslassen von 'setSizeHint' ändert nicht das Aussehen meiner GUI. 2) Warum war mein Größenhinweis standardmäßig auf -1, -1 eingestellt, und wie wird dies durch 'SetFixedSize' behoben? Warum behebt es nicht einfach den falschen Wert (-1, -1). Irgendwelche guten Dokumente gehen über die Ins-und-Outs dieser Probleme? (Dokumente enthalten: http://qt-project.org/doc/qt-4.8/qt.html#SizeHint-enum und http://qt-project.org/doc/qt-4.8/qlayout.html#SizeConstraint- enum) – neuronet

+2

@neuronet 'QLayout :: SetFixedSize' Die Größe des Haupt-Widgets ist auf' sizeHint(); 'eingestellt, es kann nicht skaliert werden. Wenn Sie keinen Größenhinweis setzen, wird Ihr Widget mit Label und Button größer als das Item, also wird es extrem hässlich und unkorrekt sein. – Chernobyl

+0

Akzeptieren der Antwort, weil es das Problem gelöst hat, aber wird definitiv jeden aufmuntern, der die Ins-und-Outs dieser Sache erklärt, um die nächste Person über die Cargo-Kult-Programmierung hinauszubringen :) – neuronet