Как сделать динамичное разрешение в 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_())
Ответы (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_())

