I want to add NodeLinkItemWidgetUI forms (custom widget) as items to the ListWidget in my main app. The problem is, that the items of the correct widget size get added to the list as items but the item content is empty.
Here is the code for the item custom widget from NodeLinkItemWidgetUI
:
from PySide2 import QtCore, QtGui, QtWidgets
class Ui_Form(QtWidgets.QWidget):
def __init__(self, nodename, nodeclass, parent=None):
super(Ui_Form,self).__init__(parent)
self.comboBox_type = QtWidgets.QComboBox()
self.comboBox_type.setGeometry(QtCore.QRect(10, 100, 51, 25))
self.comboBox_type.setCurrentText("connector")
self.comboBox_type.setObjectName("comboBox_type")
self.comboBox_type.addItem("")
self.comboBox_type.setItemText(0, "connector")
self.comboBox_type.addItem("")
self.comboBox_type.setItemText(1, "dot")
self.comboBox_type.addItem("")
self.comboBox_type.setItemText(2, "link")
self.checkBox_hide = QtWidgets.QCheckBox()
self.checkBox_hide.setGeometry(QtCore.QRect(70, 100, 51, 23))
self.checkBox_hide.setText("hide")
self.checkBox_hide.setIconSize(QtCore.QSize(16, 16))
self.checkBox_hide.setTristate(False)
self.checkBox_hide.setObjectName("checkBox_hide")
self.pushButton = QtWidgets.QPushButton()
self.pushButton.setGeometry(QtCore.QRect(10, 130, 111, 25))
self.pushButton.setText("create")
self.pushButton.setObjectName("pushButton")
self.label_icon = QtWidgets.QLabel()
self.label_icon.setGeometry(QtCore.QRect(15, 10, 100, 80))
self.label_icon.setText("")
self.label_icon.setObjectName("label_icon")
self.label_nodename = QtWidgets.QLabel()
self.label_nodename.setGeometry(QtCore.QRect(15, 10, 100, 80))
font = QtGui.QFont()
font.setWeight(75)
font.setBold(True)
self.label_nodename.setFont(font)
self.label_nodename.setText(nodename)
self.label_nodename.setAlignment(QtCore.Qt.AlignCenter)
self.label_nodename.setObjectName("label_nodename")
QtCore.QMetaObject.connectSlotsByName(self)
and here the code from my main app where they get added to my listwidget as items:
class Connecthor(QtWidgets.QMainWindow, Ui_MainWindow):
#constructor
def __init__(self, parent=None):
super(Connecthor, self).__init__(parent)
self.setupUi(self)
self.setFixedSize(self.size())
#ADDING TEST WIDGETS
for i in range(5):
self.createNewLink("test","")
def createNewLink(self, nodename, nodeclass):
item = QtWidgets.QListWidgetItem(self.listWidget_links)
item_widget = NodeLinkItemWidgetUI.Ui_Form(nodename=nodename, nodeclass=nodeclass)
#size hint doesn't return the correnct widget size so I did set it manually
# print item_widget.sizeHint()
# item.setSizeHint(item_widget.sizeHint())
item.setSizeHint(QtCore.QSize(130, 160))
self.listWidget_links.addItem(item)
self.listWidget_links.setItemWidget(item, item_widget)
A widget only shows other widgets inside if these are your children, in your self.comboBox_type
, self.checkBox_hide
, self.pushButton
and self.label_icon
have no father so they will not show up, the solution is to pass a parent, in this case self
.
class Ui_Form(QtWidgets.QWidget):
def __init__(self, nodename, nodeclass, parent=None):
super(Ui_Form,self).__init__(parent)
self.comboBox_type = QtWidgets.QComboBox(self) # <---
...
self.checkBox_hide = QtWidgets.QCheckBox(self)
...
self.pushButton = QtWidgets.QPushButton(self) # <---
...
self.label_icon = QtWidgets.QLabel(self) # <---
...