Button mit Funktion zum Schließen eines PyQt5-Fensters verknüpfen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Atalanttore
User
Beiträge: 125
Registriert: Freitag 6. August 2010, 17:03

Mittwoch 26. September 2018, 21:40

Hallo

Wie schließt man mit PyQt5 erfolgreich ein Fenster?

Mit folgendem Python-Code funktioniert es jedenfalls nicht:

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.uic import loadUi


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.exit_button.clicked.connect(self.quit)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app_window = loadUi("test.ui")
    app_window.show()
    sys.exit(app.exec_())
Bei einem Klick auf den Button erscheint nicht mal eine Fehlermeldung. Es tut sich einfach gar nichts.


test.ui

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>481</width>
    <height>329</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="exitButton">
    <property name="geometry">
     <rect>
      <x>190</x>
      <y>130</y>
      <width>117</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Exit</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>481</width>
     <height>28</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
Gruß
Atalanttore
__deets__
User
Beiträge: 3661
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 26. September 2018, 21:44

Du erstellst ja auch keine Instanz deines MainWindows. Du musst die ui IN dem MainWindow laden. Mit self als parent für die erzeugten Widgets.
Atalanttore
User
Beiträge: 125
Registriert: Freitag 6. August 2010, 17:03

Mittwoch 26. September 2018, 22:01

In etwa so?

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.uic import loadUi


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.app_window = loadUi("test.ui")
        self.app_window.show()

        self.exit_button.clicked.connect(self.quit, parent=self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())
Gruß
Atalanttore
__deets__
User
Beiträge: 3661
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 26. September 2018, 22:03

Nein. Da fehlt noch die Widgets in das Fenster zu hängen. Sonst hast du doch keinen Exit Button. Und auch das show gehört auf das MainWindow.
__deets__
User
Beiträge: 3661
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 26. September 2018, 22:04

Antworten