Cómo agregar un widget personalizado a otro usando python
Frecuentes
Visto 140 equipos
0
Creé este widget usando Qt Creator y generé este código.
from PySide import QtCore, QtGui
class Ui_DATA_Entries_Widget(QtGui.QWidget):
def setupUi(self, DATA_Entries_Widget):
DATA_Entries_Widget.setObjectName("DATA_Entries_Widget")
DATA_Entries_Widget.resize(676, 50)
DATA_Entries_Widget.setMinimumSize(QtCore.QSize(676, 50))
DATA_Entries_Widget.setMaximumSize(QtCore.QSize(676, 50))
self.horizontalLayout = QtGui.QHBoxLayout(DATA_Entries_Widget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtGui.QLabel(DATA_Entries_Widget)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.lineEdit = QtGui.QLineEdit(DATA_Entries_Widget)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.label_2 = QtGui.QLabel(DATA_Entries_Widget)
self.label_2.setObjectName("label_2")
self.horizontalLayout.addWidget(self.label_2)
self.lineEdit_2 = QtGui.QLineEdit(DATA_Entries_Widget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.horizontalLayout.addWidget(self.lineEdit_2)
self.label_3 = QtGui.QLabel(DATA_Entries_Widget)
self.label_3.setObjectName("label_3")
self.horizontalLayout.addWidget(self.label_3)
self.lineEdit_3 = QtGui.QLineEdit(DATA_Entries_Widget)
self.lineEdit_3.setObjectName("lineEdit_3")
self.horizontalLayout.addWidget(self.lineEdit_3)
self.label_5 = QtGui.QLabel(DATA_Entries_Widget)
self.label_5.setMinimumSize(QtCore.QSize(47, 32))
self.label_5.setObjectName("label_5")
self.horizontalLayout.addWidget(self.label_5)
self.lineEdit_4 = QtGui.QLineEdit(DATA_Entries_Widget)
self.lineEdit_4.setObjectName("lineEdit_4")
self.horizontalLayout.addWidget(self.lineEdit_4)
self.label_4 = QtGui.QLabel(DATA_Entries_Widget)
self.label_4.setObjectName("label_4")
self.horizontalLayout.addWidget(self.label_4)
self.lineEdit_5 = QtGui.QLineEdit(DATA_Entries_Widget)
self.lineEdit_5.setObjectName("lineEdit_5")
self.horizontalLayout.addWidget(self.lineEdit_5)
self.pushButton = QtGui.QPushButton(DATA_Entries_Widget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.retranslateUi(DATA_Entries_Widget)
QtCore.QMetaObject.connectSlotsByName(DATA_Entries_Widget)
def retranslateUi(self, DATA_Entries_Widget):
DATA_Entries_Widget.setWindowTitle(QtGui.QApplication.translate("DATA_Entries_Widget", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "A", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "B", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "C", None, QtGui.QApplication.UnicodeUTF8))
self.label_5.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "D", None, QtGui.QApplication.UnicodeUTF8))
self.label_4.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "E", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("DATA_Entries_Widget", "Delete", None, QtGui.QApplication.UnicodeUTF8))
Ahora necesito agregar este widget dinámicamente, muy parecido al widget de prueba, que obtuve de otra pregunta:
from PySide import QtGui, QtCore
import sys
class Main(QtGui.QMainWindow):
def __init__(self, parent = None):
super(Main, self).__init__(parent)
# main button
self.addButton = QtGui.QPushButton('button to add other widgets')
self.addButton.clicked.connect(self.addWidget)
# scroll area widget contents - layout
self.scrollLayout = QtGui.QFormLayout()
# scroll area widget contents
self.scrollWidget = QtGui.QWidget()
self.scrollWidget.setLayout(self.scrollLayout)
# scroll area
self.scrollArea = QtGui.QScrollArea()
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setWidget(self.scrollWidget)
# main layout
self.mainLayout = QtGui.QVBoxLayout()
# add all main to the main vLayout
self.mainLayout.addWidget(self.addButton)
self.mainLayout.addWidget(self.scrollArea)
# central widget
self.centralWidget = QtGui.QWidget()
self.centralWidget.setLayout(self.mainLayout)
# set central widget
self.setCentralWidget(self.centralWidget)
def addWidget(self):
self.scrollLayout.addRow(TestButton())
class TestButton(QtGui.QPushButton):
def __init__( self, parent=None):
super(TestButton, self).__init__(parent)
self.setText("I am in Test widget")
self.clicked.connect(self.deleteLater)
app = QtGui.QApplication(sys.argv)
myWidget = Main()
myWidget.show()
app.exec_()
¿Cómo puedo sustituir fácilmente el TestButton en el segundo código con mi widget personalizado?
¡Cualquier ayuda es muy apreciada!
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python qt widget or haz tu propia pregunta.
¿Le ayuda la promoción de un contenedor de widgets en su widget personalizado? (Controlar: stackoverflow.com/questions/6350593/…) - Tay2510
@Tay2510 Cuando intento promocionar un QWidget básico, el traductor hace algo como esto
self.widget = Ui_MyCustomWid(self.scrollAreaWidgetContents) self.widget.setObjectName("widget") self.verticalLayout.addWidget(self.widget)
pero no se muestra nada - xarles