Seite 1 von 1

window size ändern

Verfasst: Montag 31. Oktober 2022, 16:34
von Nobuddy
Hallo zusammen,
habe hier einen Beispielcode, dessen Filemenu die Buttons Minimieren, Normal, Maximieren enthält.
Bei der Ausführung Normal, bekomme ich das Fenster nicht zentriert!
Das umschalten von Minimieren zu Maximieren und umgekehrt funktioniert.
Wähle ich dazwischen die Ausführung Normal aus, lässt sich das Fenster anschließend nicht mehr maximieren, hingegen minimieren funktioniert weiterhin.

Code: Alles auswählen

import sys
from PyQt5.QtCore import QRect
from PyQt5 import QtGui
from PyQt5.QtWidgets import (
    QApplication,
    QMainWindow,
    QDesktopWidget,
    QAction
    )

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = "PyQt5 QMainWindow"
        self.setWindowIcon(QtGui.QIcon("icon.png"))
        self.setWindowTitle(self.title)
        # screen size
        self.screenGeometry = QDesktopWidget().screenGeometry()
        screenWidth = self.screenGeometry.width()
        screenHight = self.screenGeometry.height()
        screenSize = 'Screen size: {} x {}'.format(screenWidth, screenHight)
        # window size
        height = int(screenHight * 0.75)
        width = int(screenWidth * 0.75)
        windowSize = 'Window size: {} x {}'.format(width, height)
        print(screenSize + '\n' + windowSize)
        top = int((screenHight - height) / 2)
        left = int((screenWidth - width) / 2)
        self.mediumGeometry = left, top, width, height
        self.setGeometry(left, top, width, height)
        self.fileMenu()
        self.show()

    def mediumSize(self):
        left, top, width, height = self.mediumGeometry
        self.setFixedWidth(width)
        self.setFixedHeight(height)
        #
        frameGeometry = self.frameGeometry()
        #frameGeometry = QRect(0, 0, width, height)
        print('frameGeometry', frameGeometry)
        centerPoint = QDesktopWidget().availableGeometry().center()
        print('centerPoint', centerPoint)
        frameGeometry.moveCenter(centerPoint)
        self.move(frameGeometry.topLeft())

    def fileMenu(self):
        mainMenu = self.menuBar()
        menus = {
            'Edit' : [
                ['Minimieren', self.showMinimized],
                ['Normal', self.mediumSize],
                ['Maximieren', self.showMaximized],
                ]
            }
        for menu in menus:
            Menu = mainMenu.addMenu(menu)
            for menuText, function in menus[menu]:
                action = QAction(menuText, self)
                action.triggered.connect(function)
                Menu.addAction(action)

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
Wäre schön, wenn jemand von Euch mir erklären könnte, warum dies nicht funktioniert und die Fehler im Code.

Grüße Nobuddy

Re: window size ändern

Verfasst: Montag 31. Oktober 2022, 19:52
von Nobuddy
Hab die Lösung beim Googeln gefunden, self.showNormal ist die Lösung und ersetzt die Funktion 'mediumSize' komplett.

Code: Alles auswählen

import sys
from PyQt5.QtCore import QRect
from PyQt5 import QtGui
from PyQt5.QtWidgets import (
    QApplication,
    QMainWindow,
    QDesktopWidget,
    QAction
    )

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = "PyQt5 QMainWindow"
        self.setWindowIcon(QtGui.QIcon("icon.png"))
        self.setWindowTitle(self.title)
        # screen size
        self.screenGeometry = QDesktopWidget().screenGeometry()
        screenWidth = self.screenGeometry.width()
        screenHight = self.screenGeometry.height()
        screenSize = 'Screen size: {} x {}'.format(screenWidth, screenHight)
        # window size
        height = int(screenHight * 0.75)
        width = int(screenWidth * 0.75)
        windowSize = 'Window size: {} x {}'.format(width, height)
        print(screenSize + '\n' + windowSize)
        top = int((screenHight - height) / 2)
        left = int((screenWidth - width) / 2)
        self.mediumGeometry = left, top, width, height
        self.setGeometry(left, top, width, height)
        self.fileMenu()
        self.show()

    def fileMenu(self):
        mainMenu = self.menuBar()
        menus = {
            'Edit' : [
                ['Minimieren', self.showMinimized],
                ['Normal', self.showNormal],
                ['Maximieren', self.showMaximized],
                ]
            }
        for menu in menus:
            Menu = mainMenu.addMenu(menu)
            for menuText, function in menus[menu]:
                action = QAction(menuText, self)
                action.triggered.connect(function)
                Menu.addAction(action)

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())