window size ändern

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Nobuddy
User
Beiträge: 997
Registriert: Montag 30. Januar 2012, 16:38

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
Nobuddy
User
Beiträge: 997
Registriert: Montag 30. Januar 2012, 16:38

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())
Antworten