ich habe bereits vor langen immer Mal an GUIs gearbeitet, doch als Anfänger kennt man noch nicht alle Wege / Methoden, um am effizentesten ein Ziel zu erreichen.
Ich hatte es immer so gemacht:
Als zentrales Widget habe ich ein QFrame, welchen ich in 2 weitere Frame gesplittet habe (vertikal). Links sind Buttons, mit denen man die Frames wechselt, die rechts angezeigt werden. Okay, ein Wechsel war es eigentlich nicht wirklich. ^^ Ich hatte für jede neue "Seite" einfach bloß das Layout geändert und mit der for-Schleife Widgets zeigen lassen (.show()) bzw verstecken lassen (.hide()).
Eben nicht die smarte Variante... Da ich allerdings dabei bin mein Programmcode mal "professioneller" aussehen zu lassen, habe ich nachgeschaut wie das mit neuen Seiten innerhalb einer GUI ist, dabei bin ich auf ".raise_()" gestoßen - also z.b page_1_frame.raise_() , um ein Frame hervor zu holen und über die anderen Frames zu legen.
Nun ist die Frage, wie stelle ich das am Besten an, dass das zentrale Widget, also der Frame, geteilt wird ,aber nur rechts der Frame aktualisiert wird, also wenn ein neuer Frame hervor geholt wird?
Vllt wird das Ganze ja mehr mit dem Beispielprogramm klar?
Code: Alles auswählen
from PyQt5.QtWidgets import QApplication,QMainWindow,QLabel,QFrame,QHBoxLayout,QPushButton,QSplitter,QVBoxLayout
from PyQt5.QtCore import Qt
import sys
#Testprogramm für raise_() von verschiedenen Seiten in einer GUI
#Bezüglich Frames stappeln und nur das gewünschte Frame hervor holen
class programm():
app = QApplication(sys.argv)
def main_window(self):
self.window = QMainWindow()
self.window.setWindowTitle("FrameStack Test")
self.window.setGeometry(400,500,500,250)
self.c_frame = QFrame()
self.frame_left = QFrame()
self.frame_right = QFrame()
self.button1 = QPushButton("Seite 1")
self.button2 = QPushButton("Seite 2")
self.label1 = QLabel("Seite 1")
self.label2 = QLabel("Seite 2")
self.layout = QHBoxLayout()
self.splitter = QSplitter(Qt.Horizontal)
self.splitter.addWidget(self.frame_left)
self.splitter.addWidget(self.frame_right)
self.layout.addWidget(self.splitter)
self.frame_right.setStyleSheet("background: solid red") #zum besseren Auseinanderhalten von beiden Frames
self.layout_left = QVBoxLayout()
self.splitter_left = QSplitter(Qt.Vertical)
self.splitter_left.addWidget(self.button1)
self.splitter_left.addWidget(self.button2)
self.layout_left.addWidget(self.splitter_left)
self.button1.clicked.connect(self.page_1)
self.button2.clicked.connect(self.page_2)
self.frame_left.setLayout(self.layout_left)
self.c_frame.setLayout(self.layout)
self.window.setCentralWidget(self.c_frame)
self.window.show()
def page_1(self):
pass
def page_2(self):
pass
prog = programm()
prog.main_window()
sys.exit(prog.app.exec_())
Beim Programmstart wird die Startseite angezeigt.
Klicke ich aber auf den Button "Seite 1" soll im rechten, dem roten, Frame der Frame für die Seite 1 angezeigt werden.
Könnt ihr mir helfen?
Grüße,
xXSkyWalkerXx1