Ich bin neu bei pyqt und versuche, eine Reihe von verschachtelten Containern zu erstellen, die meine Steuerelemente enthalten. Ich konnte keine Beispiele finden, die Widgets verschachteln (und sie layouted lassen). Ich konnte nur Layouts verschachteln, aber das möchte ich nicht erreichen. Ein Grund, warum ich das möchte, ist die Kontrolle über die Hintergrundfarbe meiner Container. Da Layouts keine Farbe haben, brauche ich QWidgets oder QFrames. Dies ist, wie weit ich gekommen:PYQT - Verschachteln von Widgets und Layouts in mehreren Ebenen
class AssetCreationWindow(QtWidgets.QMainWindow):
def __init__(self):
super(AssetCreationWindow, self).__init__()
self.create_content()
self.show()
def create_content(self):
# creating main container-frame, parent it to QWindow
self.main_CF = QtWidgets.QFrame(self)
self.main_CF.setStyleSheet('background-color: rgba(255, 0, 0, 1);')
self.setCentralWidget(self.main_CF)
# creating layout and parent it to main container
# is it correct, that main_CL now manages children of main_CF ?
self.main_CL = QtWidgets.QVBoxLayout(self.main_CF)
# creating the first subcontainer + layout, parenting it
asset_CGF = QtWidgets.QFrame(self.main_CF)
asset_CGF.setStyleSheet('background-color: rgba(0, 255, 0, 1);')
asset_CGL = QtWidgets.QHBoxLayout(asset_CGF)
# creating label and lineEdit, both are supposed to be on top of asset_CGF
asset_label = QtWidgets.QLabel("Assetname: ", asset_CGF)
asset_CGL.addWidget(asset_label)
asset_name = QtWidgets.QLineEdit("MyNewAsset", asset_CGF)
asset_CGL.addWidget(asset_name)
# doing the same with a second container
department_CGF = QtWidgets.QFrame(self.main_CF)
department_CGF.setStyleSheet('background-color: rgba(0, 0, 255, 1);')
department_CGL = QtWidgets.QHBoxLayout(department_CGF)
department_label = QtWidgets.QLabel("Department: ", department_CGF)
department_CGL.addWidget(department_label)
department_names = QtWidgets.QComboBox(department_CGF)
department_CGL.addWidget(department_names)
Unfortunatly dieser Ansatz stapelt alle Widgets in der rechten oberen Ecke auf dem jeweils anderen. Ein anderes war, das ParentWidget von allen Layouts außer main_CL zu entfernen und addLayout() zu verwenden.
def create_content(self):
self.main_CF = QtWidgets.QFrame(self)
self.setCentralWidget(self.main_CF)
self.main_CL = QtWidgets.QVBoxLayout(self.main_CF)
asset_CGF = QtWidgets.QFrame(self.main_CF)
asset_CGF.setStyleSheet('background-color: rgba(255, 0, 0, 1);')
asset_CGL = QtWidgets.QHBoxLayout()
self.main_CL.addLayout(asset_CGL)
asset_label = QtWidgets.QLabel("Asset Name: ", asset_CGF)
asset_CGL.addWidget(asset_label)
asset_name = QtWidgets.QLineEdit("MyNewAsset", asset_CGF)
asset_CGL.addWidget(asset_name)
department_CGF = QtWidgets.QFrame(self.main_CF)
department_CGF.setStyleSheet('background-color: rgba(0, 255, 0, 1);')
department_CGL = QtWidgets.QHBoxLayout()
self.main_CL.addLayout(department_CGL)
department_label = QtWidgets.QLabel("Department: ", department_CGF)
department_CGL.addWidget(department_label)
department_names = QtWidgets.QComboBox(department_CGF)
department_CGL.addWidget(department_names)
Das sieht besser aus in der Regel aber die untergeordneten Container-Layouts scheinen nicht wissen über die untergeordneten Container. Obwohl die Controller den Untercontainern zugeordnet sind, befinden sich die Controller nicht auf den Untercontainern. Die Untercontainer sind wieder in der oberen rechten Ecke gestapelt. Ich bin am Ende meines Wissens.
Sie könnten ein Bild von dem zeigen, was Sie wollen. – eyllanesc