_anonymous0815_
Lt. Commander
- Registriert
- Aug. 2020
- Beiträge
- 1.406
Hallo liebes Forum,
ich habe seit Ewigkeiten nicht mehr mit Python programmiert und dann auch noch nicht so ausführlich objektorientiert, ich habe es geschafft, Objekte (Qt-Buttons) in Listen zu speichern. Das ist für horizontale, wie vertikale Menüs/Layouts durchaus ausreichend, aber es gibt noch das sog. Grid-Layout, welches eine Matrix erstellt. Dafür möchte ich auch eine Matrix an die erstellende Funktion übergeben, die mir die Objekte dann auch wieder als Matrix in einer Variable anlegt, damit ich im weiteren Verlauf darauf einzeln zugreifen kann.
Und das ist auch der Teil, welcher nicht funktioniert.
Hier z.B. wie die Funktion mit normalen, nicht verschachtelten Listen (Matrixen) umgeht:
Und so sieht das in der Liste aus (einfache Liste):
So in der Matrix:
Und so als Ausgabe in der GUI:
Wie man sieht, spuckt der Code eben nicht alle Reihen der Matrix aus, sondern nur die erste, obwohl alle 12 Buttons als Objekt in der entsprechenden Liste angelegt sind.
Und an dieser Stelle hoffe ich, dass jemand für mich einen Tipp hat, wie genau ich hier die Struktur aus-/einlesen muss, damit ich auf alle Objekte in der Matrix zugreifen kann und diese aber auch in der GUI erstellt werden.
Falls noch weitere Fragen bestehen, dann bitte stellen, falls noch wichtige Infos fehlen, bitte auch darauf aufmerksam machen, dann reiche ich diese nach.
Vielen Dank und viele Grüße!
ich habe seit Ewigkeiten nicht mehr mit Python programmiert und dann auch noch nicht so ausführlich objektorientiert, ich habe es geschafft, Objekte (Qt-Buttons) in Listen zu speichern. Das ist für horizontale, wie vertikale Menüs/Layouts durchaus ausreichend, aber es gibt noch das sog. Grid-Layout, welches eine Matrix erstellt. Dafür möchte ich auch eine Matrix an die erstellende Funktion übergeben, die mir die Objekte dann auch wieder als Matrix in einer Variable anlegt, damit ich im weiteren Verlauf darauf einzeln zugreifen kann.
Python:
from PyQt6.QtCore import QSize, Qt, QThread, QObject, pyqtSignal, pyqtSlot
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QGridLayout, QHBoxLayout, QVBoxLayout, QLabel
from PyQt6.QtGui import QPalette, QColor
class Buttons():
def __init__(self, isFlat=False, btnText="empty", sizeWidth=250, sizeHeight=100):
self.button = QPushButton()
self.button.setFlat(isFlat)
self.button.setText(btnText)
self.button.setGeometry(400, 200, sizeWidth, sizeHeight)
self.button.setStyleSheet("""
QPushButton {
}
QPushButton:active {
}
""")
def createButtonObjects(BtnTxtLst, BtnObjLst, PosLayout, isGrid=False):
if isGrid == True:
for idrow, row in enumerate(BtnTxtLst):
for idcol, col in enumerate(row):
BtnObjLst.append(Buttons(False, col))
PosLayout.addWidget(BtnObjLst[idcol].button, idrow, idcol) #To be fixed
print(BtnObjLst)
else:
for id_menu_button, menu_button in enumerate(BtnTxtLst):
BtnObjLst.append(Buttons(False, menu_button))
PosLayout.addWidget(BtnObjLst[id_menu_button].button)
g_layout = QGridLayout()
GridMenuBtnText = [
["Element 0", "Element 1", "Element 2", "Element 3"],
["Element 4", "Element 5", "Element 6", "Element 7"],
["Element 8", "Element 9", "Element 10", "Element 11"]
]
self.g_m_btnList = []
createButtonObjects(GridMenuBtnText, self.g_m_btnList, g_layout, True)
Und das ist auch der Teil, welcher nicht funktioniert.
Hier z.B. wie die Funktion mit normalen, nicht verschachtelten Listen (Matrixen) umgeht:
Python:
h_layout = QHBoxLayout()
HeaderMenuBtnText = ["Menü", "Dies", "Das", "Ananas"]
self.h_m_btnList = []
createButtonObjects(HeaderMenuBtnText, self.h_m_btnList, h_layout)
h_widget = QWidget()
h_widget.setLayout(h_layout)
Und so sieht das in der Liste aus (einfache Liste):
Code:
[<__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fe8ea286d10>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fe8e2153c50>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fe8e2153e10>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fe8e2153dd0>]
So in der Matrix:
Code:
[<__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03551710>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03551ad0>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553850>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553890>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec035538d0>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553950>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553990>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec035539d0>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553a10>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553910>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553ad0>, <__main__.MainWindow.__init__.<locals>.Buttons object at 0x7fec03553b50>]
Und so als Ausgabe in der GUI:
Wie man sieht, spuckt der Code eben nicht alle Reihen der Matrix aus, sondern nur die erste, obwohl alle 12 Buttons als Objekt in der entsprechenden Liste angelegt sind.
Und an dieser Stelle hoffe ich, dass jemand für mich einen Tipp hat, wie genau ich hier die Struktur aus-/einlesen muss, damit ich auf alle Objekte in der Matrix zugreifen kann und diese aber auch in der GUI erstellt werden.
Falls noch weitere Fragen bestehen, dann bitte stellen, falls noch wichtige Infos fehlen, bitte auch darauf aufmerksam machen, dann reiche ich diese nach.
Vielen Dank und viele Grüße!
Zuletzt bearbeitet: