Как сделать динамичное разрешение в PyQt5

Код программы

Я написал основу, но разрешение не является динамичным. (Первая конструктор __init__ в классе ApexHelper)

Как сделать так, чтобы разрешение было динамичным?

import sys
from PyQt5 import QtCore, QtGui, QtWidgets    
from Apex import Ui_MainWindow
from PyQt5.QtGui import QIcon 
from PyQt5.uic import loadUi
from Apex1 import Ui_other
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class ApexHelper(QtWidgets.QMainWindow):
    def __init__(self):
        super(ApexHelper, self).__init__() 
 
        self.Apex = Ui_MainWindow()
        self.Apex.setupUi(self)
        self.NameProgramm()
        self.Apex.pushButton.clicked.connect(self.gotoWeapon)# Кнопка 
        чтобы переходить на другое окно
        ################ Теперь плавное изменение окна

    def NameProgramm(self):
        self.setWindowTitle('Apex Helper')
        self.setWindowIcon(QIcon('ff.jpg'))

    def gotoWeapon(self):
        application1=Weapon()
        widget.addWidget(application1) # даёт возможность перейти на 2 
        слайд
        widget.setCurrentIndex(widget.currentIndex()+1)
class Weapon(QtWidgets.QMainWindow):
    def __init__(self):
        super(Weapon, self).__init__()
        self.Apex1 = Ui_other()
        self.Apex1.setupUi(self)
        self.Apex1.pushButton.clicked.connect(self.gotomain)

    def gotomain(self):
        #application = ApexHelper()
        widget.addWidget(application) #ДОБАВИЛ ВИДЖЕТ ТУТ И НИЖЕ
        widget.setCurrentIndex(widget.currentIndex()+1)
    

#create app   
app = QtWidgets.QApplication(sys.argv)
application = ApexHelper()
#application.resize(550, 246)
#application.show() # работает без него


##########################################################################

widget = QtWidgets.QStackedWidget() #добавление виджетов
widget.addWidget(application) #добавить индекс в экземпляр application 
класса ApexHelper !!!!!!И ТУТ ДОБАВИЛ!!!
#widget.addWidget(application1) #добавить индекс в экземпляр application1 
класса screen2
#widget.setFixedHeight(600)
#widget.setFixedWidth(470)
widget.show() #показать виджеты
#main loop
sys.exit(app.exec())

Apex.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(471, 614)
        MainWindow.setStyleSheet("background-color: #22222e")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setStyleSheet("background-color: #000000")
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(110, 0, 361, 101))
        self.frame.setStyleSheet("background-color: #8B0000;\n"
"border-radius: 30;\n"
"border: 2px solid #708090\n"
"")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label_2 = QtWidgets.QLabel(self.frame)
        self.label_2.setGeometry(QtCore.QRect(70, 30, 191, 31))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 101, 91))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("ff.jpg"))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 170, 75, 21))
        self.pushButton.setStyleSheet("QPushButton {\n"
"color: white;\n"
"background-color: #808080;\n"
"}")
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 471, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_2.setText(_translate("MainWindow", "ApexLegends"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Apex1.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_other(object):
    def setupUi(self, other):
        other.setObjectName("other")
        other.resize(524, 612)
        self.centralwidget = QtWidgets.QWidget(other)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(140, 110, 261, 301))
        font = QtGui.QFont()
        font.setPointSize(36)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(160, 350, 75, 23))
        self.pushButton.setObjectName("pushButton")
        other.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(other)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 524, 21))
        self.menubar.setObjectName("menubar")
        other.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(other)
        self.statusbar.setObjectName("statusbar")
        other.setStatusBar(self.statusbar)

        self.retranslateUi(other)
        QtCore.QMetaObject.connectSlotsByName(other)

    def retranslateUi(self, other):
        _translate = QtCore.QCoreApplication.translate
        other.setWindowTitle(_translate("other", "MainWindow"))
        self.label.setText(_translate("other", "ЭТО ГГ!"))
        self.pushButton.setText(_translate("other", "ОБратно"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    other = QtWidgets.QMainWindow()
    ui = Ui_other()
    ui.setupUi(other)
    other.show()
    sys.exit(app.exec_())

функция nameprogramm


Ответы (1 шт):

Автор решения: S. Nick

Вам надо изучить управление компоновкой. Начните с класса QLayout - это базовый класс менеджеров геометрии. Болъше https://doc.qt.io/qt-5/qlayout.html#details

Подставьте свои изображения и попробуйте:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


#from Apex1 import Ui_other
class Ui_other(object):
    def setupUi(self, other):
        other.setObjectName("other")
        other.resize(524, 612)
        self.centralwidget = QtWidgets.QWidget(other)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(140, 110, 261, 301))
        font = QtGui.QFont()
        font.setPointSize(36)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(160, 350, 75, 23))
        self.pushButton.setObjectName("pushButton")
        other.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(other)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 524, 21))
        self.menubar.setObjectName("menubar")
        other.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(other)
        self.statusbar.setObjectName("statusbar")
        other.setStatusBar(self.statusbar)

        self.retranslateUi(other)
        QtCore.QMetaObject.connectSlotsByName(other)

    def retranslateUi(self, other):
        _translate = QtCore.QCoreApplication.translate
        other.setWindowTitle(_translate("other", "MainWindow"))
        self.label.setText(_translate("other", "ЭТО ГГ!"))
        self.pushButton.setText(_translate("other", "ОБратно"))


#from Apex import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(471, 614)
        MainWindow.setStyleSheet("background-color: #22222e")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setStyleSheet("background-color: #000000")
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(110, 0, 361, 101))
        self.frame.setStyleSheet("background-color: #8B0000;\n"
"border-radius: 30;\n"
"border: 2px solid #708090\n"
"")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label_2 = QtWidgets.QLabel(self.frame)
        self.label_2.setGeometry(QtCore.QRect(70, 30, 191, 31))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 101, 91))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("lena.jpg").scaled(120, 120))         # +++ scaled
        self.label.setObjectName("label")
        
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(190, 170, 75, 21))
        self.pushButton.setStyleSheet("QPushButton {\n"
"color: white;\n"
"background-color: #808080;\n"
"}")
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 471, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_2.setText(_translate("MainWindow", "ApexLegends"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))

        
class Weapon(QtWidgets.QMainWindow, Ui_other):
    def __init__(self):
        super(Weapon, self).__init__()
        self.setupUi(self)
        
        vbox = QVBoxLayout(self.centralwidget)
        vbox.addWidget(self.label, alignment=Qt.AlignCenter)
        vbox.addWidget(self.pushButton, alignment=Qt.AlignCenter)


class ApexHelper(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(ApexHelper, self).__init__(parent) 
        self.setupUi(self)
        
        vbox = QVBoxLayout(self.frame)
        self.label_2.setFixedSize(200, 50)
        vbox.addWidget(self.label_2, alignment=Qt.AlignHCenter | QtCore.Qt.AlignTop)  
        vbox.addStretch(0)        
        vbox.addWidget(self.label, alignment=Qt.AlignLeft | QtCore.Qt.AlignVCenter) 
        vbox.addStretch(0)
        
        layout = QGridLayout(self.centralwidget)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.frame, 1, 1) 
        layout.addWidget(self.pushButton, 3, 1, alignment=Qt.AlignCenter)
        
        layout.setRowStretch(0, 2)
        layout.setRowStretch(1, 7)
        layout.setRowStretch(2, 2)
        layout.setRowStretch(3, 2)
        layout.setRowStretch(4, 2)
        layout.setColumnStretch(0, 2)
        layout.setColumnStretch(1, 12)
        layout.setColumnStretch(2, 2)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)        
        
        self.apexHelper = ApexHelper(self)
        self.apexHelper.pushButton.clicked.connect(self.gotoWeapon) 

        self.weapon = Weapon()
        self.weapon.pushButton.clicked.connect(self.gotomain)

        
        self.stack = QStackedWidget()                 
        self.stack.addWidget(self.apexHelper)
        self.stack.addWidget(self.weapon)
 
        self.stack.setCurrentIndex(0)
        self.nameProgramm(self.stack.currentIndex())
        
        hbox = QHBoxLayout(self.centralWidget)
        hbox.setContentsMargins(0, 0, 0, 0)
        hbox.addWidget(self.stack)
        
    def gotoWeapon(self):  
        self.stack.setCurrentIndex(1)
        self.nameProgramm(self.stack.currentIndex())

    def gotomain(self): 
        self.stack.setCurrentIndex(0)
        self.nameProgramm(self.stack.currentIndex())        

    def nameProgramm(self, w=0):
        if w == 0:
            self.setWindowTitle('Apex Helper')
            self.setWindowIcon(QIcon('lena.jpg'))
        elif w == 1:   
            self.setWindowTitle('Weapon')
            self.setWindowIcon(QIcon('im.png'))
            

if __name__ == "__main__": 
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(700, 450)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка