ich bin, wie so viele, ein kleiner Frischling sowohl auf dem Gebiet Python/Programmieren als auch im speziellen pyQt.
Mein Ziel ist es eine Lagertankverwaltung zu programmieren. Die Hauptansicht hierfür soll eine Übersicht mit Kacheln sein, welche entsprechende Tankinformationen enthalten um somit einen Überblick über die Tanks und ihren Zustand zu haben.
Das ganze GUI will ich überwiegend mit dem Qt Designer basteln.
Mein Problem ist jetzt, wie ich dynamisch die entsprechenden Kacheln (seperat ertstellte Widgets) in meinen Frame im MainWindow geladen bekomme.
Ich bin seit einigen Tagen auf der Suche nach sinnvollen Lösungen, aber bisher leider noch nicht fündig geworden.
Ich habe mein MainWindow über MainWindow_ui.py in mein main.py importiert und als Klasse Initialisiet.
Hier lassen sich ja auch rel. einfach Widget per Code einfügen etc.
Mein Gedanke war jetzt, über das Initialisieren einer zweiten Klasse "wid", welche ein Widget enthält, dieses entsprechend in mein MainWindow zu integrieren.
Somit hätte ich die möglichkeit meine Daten für jeden Tank individuell in das Widget zu laden und dieses entsprechend oft, je nach Tankanzahl, in mein MainWindow zu platzieren.
Leider musste ich feststellen, dass das so wohl nicht geht oder ich es einfach nicht hinbekomme. Bei einige Beiträgen bin ich darauf gestoßen, dass man Widgets im Designer Promoten kann/muss, leider würde sich damit aber noch nicht die Problematik lösen, dass die Anzahl der zu ladenden Elemente variieren kann.
Code: Alles auswählen
main.py
import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
from MainWin import Ui_MainWindow
from wid import Ui_wid
class MainWindow(qtw.QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(lambda: self.addwid())
def addwid(self):
self.ui.verticalLayout.addWidget(wid())
class wid(qtw.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.u2 = Ui_wid()
self.u2.setupUi(self)
#self.show()
if __name__ == '__main__':
app=qtw.QApplication(sys.argv)
w=MainWindow()
w.show()
sys.exit(app.exec_())
Code: Alles auswählen
wid.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_wid(object):
def setupUi(self, wid):
wid = QtWidgets.QWidget()
wid.setObjectName("wid")
wid.resize(400, 300)
wid.setStyleSheet("background-color: rgb(0, 255, 0);")
self.retranslateUi(wid)
QtCore.QMetaObject.connectSlotsByName(wid)
def retranslateUi(self, wid):
_translate = QtCore.QCoreApplication.translate
wid.setWindowTitle(_translate("wid", "Form"))
Code: Alles auswählen
MainWin.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setObjectName("widget")
self.verticalLayout.addWidget(self.widget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Add Widget"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ich verstehe nicht ganz, warum ich eine Klasse nicht als Widget integrieren kann, wenn ich jedoch den Aufbau des Widgets direkt als variable übergebe funktioniert es ohne Probleme.
Hoffentlich ist es nicht zu wirr und ihr versteht was ich meine
Vielen lieben Dank schonmal für eure Hilfe und eure Ideen!
Die Idee ist sich das Widget für die Tanks später noch ohne Probleme mit dem Designer umgestalten zu können.