QMainWindow zentriert auf dem Bildschirm platzieren

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

Hallo

Ich würde gerne ein QMainWindow zentriert auf dem Bildschirm platzieren. Ich habe dazu etwas Code angepasst, aber bei mir kommt es immer zur folgenden Fehlemeldung:

Code: Alles auswählen

  File "/home/ata/source/main.py", line 25, in <module>
    main_window = MainWindow()
  File "/home/ata/source/main.py", line 14, in __init__
    self.availableGeometry()
AttributeError: 'MainWindow' object has no attribute 'availableGeometry'
Code:

Code: Alles auswählen

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QDesktopWidget, QMainWindow, QStyle


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

        self.setGeometry(QStyle.alignedRect(
            Qt.LeftToRight,
            Qt.AlignCenter,
            self.size(),
            self.availableGeometry()
        ))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())
In der Oberklasse `QDesktopWidget` finde ich allerdings eine Methode namens `availableGeometry()`.

Was muss man anders machen, damit es funktioniert?

Gruß
Atalanttore
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mehrfach Vererbung von Q-Objekten zumindest ist schon mal eine ganz bescheidene Idee.

http://doc.qt.io/qt-5/moc.html#multiple ... o-be-first

Lass das also. Für mich funktioniert das problemlos, der Code an dem ich akut arbeite ist hier:

https://github.com/deets/new-joy-tracke ... manager.py
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ups. Falsche Methode. Ich benutze restoreGeometry. setGeometry habe ich noch nie genutzt. Die Bemerkung zu mehrfachvererbung bleibt aber bestehen.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Da mein Code mit als auch ohne Mehrfachvererbung nicht funktioniert, habe ich `QDesktopWidget` nun wieder entfernt.

In deinem Code sehe ich Methoden zum Speichern und Laden von Fenstereinstellungen, aber ich möchte ein `QMainWindow` nur in der Mitte des Bildschirms platzieren ohne etwas zu speichern. Ein `QDialog` erscheint bei mir standardmäßig in der Mitte des Bildschirms und ein `QMainWindow` links oben.

Gruß
Atalanttore
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie ich schon sagte - falsche Methode meinerseits. Dein Problem habe ich nicht versucht zu loesen - und darum auch keine Ahnung, wie das geht.
Antworten