2 PYQT5 Fenster anzeigen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
timm4444
User
Beiträge: 51
Registriert: Samstag 1. August 2020, 14:11

Ich habe eine kurze Frage zu pyqt5:
Ich habe 2 pyqt5 Fenster und mochte sie nacheinander anzeigen. Man drückt im ersten einen Button und dann erscheint das andere und das erste verschwindet. Wie mache ich das? Erstelle ich ein neues Fenster oder Lösche ich den Fensterinhalt des 1. Fenster und setzte dann den des 2. Fenster rein?

Danke im vorraus für Lösungsansätze.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Was hat dir an den Antworten in dem anderen Thread nicht gefallen?

Wenn es ein neues Fenster ist, wie willst du denn da einen Inhalt löschen?
Ein Fenster ist das, was man frei auf dem Bildschirm bewegen kann. In der Regel mit Buttons zum Mini- und Maximieren und zum Schließen.
Und wenn du weißt wie du das erste Fenster anzeist, dann weißt du auch, wie du ein zweites anzeigst: mit .show().

Und wie ich dir bereits in dem anderen Thread geschrieben haben: du musst dich bei Qt mit "Signals" beschäftigen. Und ein Fenster hat neben .show() auch andere Funktionen.
timm4444
User
Beiträge: 51
Registriert: Samstag 1. August 2020, 14:11

ok, ich schaus mir noch mal an :-)
timm4444
User
Beiträge: 51
Registriert: Samstag 1. August 2020, 14:11

Sorry, aber ich stehe gerade komplett auf dem Schlauch. :-(

"Signals" kenn ich, aber ich möchte eine Fenster anzeigen und wenn ich auf einen Button drücke soll sich ein zweites Fenster anzeigen und das erste soll nicht mehr zu sehen sein.

Codebeispiel wäre nett.(Sehr einfaches Fenster reicht)

Tut mir leid, falsch ich hier gerade irgendwie komplett "dumme" Frage stellen, aber ich bekomme es einfach nicht hin. :-(
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Fenster Anzeigen und Verstecken ist ganz einfach:

Code: Alles auswählen

    def button_clicked(self):
        self.hide()
        self.other_window.show()
timm4444
User
Beiträge: 51
Registriert: Samstag 1. August 2020, 14:11

bei mir startet das zweite Fenster nicht!

Code folgt:
timm4444
User
Beiträge: 51
Registriert: Samstag 1. August 2020, 14:11

Code: Alles auswählen

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtCore import QSize

class HelloWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(640, 480))
        self.setWindowTitle("Hello world 1")

        centralWidget = QWidget(self)
        self.setCentralWidget(centralWidget)

        gridLayout = QGridLayout(self)
        centralWidget.setLayout(gridLayout)

        title = QLabel("Hello World from PyQt", self)
        title.setAlignment(QtCore.Qt.AlignCenter)
        gridLayout.addWidget(title, 0, 0)

    def closeEvent(self, event):
        event.ignore()
        print("1. Fenster schließen")
        mainWin.hide()

        mainWin2 = HelloWindow2()
        mainWin2.show()


class HelloWindow2(QMainWindow):
    def __init__(self):

        QMainWindow.__init__(self)
        print("2. Fenster offen")
        self.setMinimumSize(QSize(640, 480))
        self.setWindowTitle("Hello world")

        centralWidget = QWidget(self)
        self.setCentralWidget(centralWidget)

        gridLayout = QGridLayout(self)
        centralWidget.setLayout(gridLayout)

        title = QLabel("Hello World from PyQt 2", self)
        title.setAlignment(QtCore.Qt.AlignCenter)
        gridLayout.addWidget(title, 0, 0)

    def closeEvent(self, event):
        print("BYE")
        event.accept()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = HelloWindow()
    mainWin.show()
    sys.exit(app.exec_())
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Fenster wird angelegt, aber gleich wieder abgeräumt durch die Garbage Collection.

Leg das zweite Fenster in deiner main-Funktion an, übergib es an HelloWindow als Argument, Merk dir das da, und zeige es, wenn du das erste Fenster versteckst.
timm4444
User
Beiträge: 51
Registriert: Samstag 1. August 2020, 14:11

Ok, danke. :-)
Antworten