Масштабирование элементов на форме PyQt5
Структура одной из моих вкладок на QTabWidget выглядит примерно так:
Остальные вкладки виджета уже адаптивные, следовательно эту я также хочу сделать адаптивной. Если её можно растянуть в длину, то в высоту здесь растягивать нечего.
Поэтому я решила, что можно просто масштабировать все элементы при изменении размера формы и уже задавала такой вопрос, но после него у меня возникли новые вопросы:
При добавлении любых
styleSheet(даже пустых, напримерQLineEdit { }) кодself.setFont(...)не срабатывает иself.font.setPointSize(...)тоже.Возможно ли масштабировать все элементы, кроме текста на
QTabWidget?Есть ли другие варианты, как правильно обеспечить адаптивность на подобных вкладках?
main.py:
import sys
from PyQt5 import QtGui, uic
from PyQt5.Qt import *
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
uic.loadUi('scale.ui', self)
self.font = QtGui.QFont()
self.font.setFamily("Consolas")
self.font.setPointSize(8)
self.setFont(self.font)
def resizeEvent(self, event):
w = self.size().width()
if w < 150:
self.font.setPointSize(8)
self.setFont(self.font)
elif 150 <= w < 300:
self.font.setPointSize(10)
self.setFont(self.font)
elif 300 <= w < 600:
self.font.setPointSize(12)
self.setFont(self.font)
elif 600 <= w < 800:
self.font.setPointSize(15)
self.setFont(self.font)
elif 800 <= w < 1000:
self.font.setPointSize(20)
self.setFont(self.font)
elif 1000 <= w < 1200:
self.font.setPointSize(25)
self.setFont(self.font)
elif w >= 1200:
self.font.setPointSize(30)
self.setFont(self.font)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
scale.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>546</width>
<height>421</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="styleSheet">
<string notr="true">QLineEdit { }</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Tab 1</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>GroupBox1</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="styleSheet">
<string notr="true">font-size: 24px;</string>
</property>
<property name="text">
<string>Задача организации</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="text">
<string>Повседневная практика </string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>GroupBox3</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_4">
<property name="styleSheet">
<string notr="true">font-size: 24px;</string>
</property>
<property name="text">
<string>Задача организации</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_3">
<property name="text">
<string>Не следует, однако забывать, что сложившаяся структура</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Идейные соображения высшего порядка</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>GroupBox2</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_3">
<property name="styleSheet">
<string notr="true">font-size: 24px;</string>
</property>
<property name="text">
<string>Задача организации</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_5">
<property name="text">
<string>С другой стороны сложившаяся </string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2">
<property name="text">
<string>Идейные соображения высшего порядка</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="1">
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>GroupBox4</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_5">
<property name="styleSheet">
<string notr="true">font-size: 24px;</string>
</property>
<property name="text">
<string>Задача организации</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_6">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_4">
<property name="text">
<string>Равным образом новая модель организационной</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_7">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Tab 2</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>546</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
Этот код работает, если в .ui файле убрать styleSheet "QLineEdit { }".
Ответы (1 шт):
Попробуйте так:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets #, uic
from PyQt5.Qt import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(546, 421)
# MainWindow.setStyleSheet("QLineEdit { }")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.gridLayout = QtWidgets.QGridLayout(self.tab)
self.gridLayout.setObjectName("gridLayout")
self.groupBox = QtWidgets.QGroupBox(self.tab)
self.groupBox.setObjectName("groupBox")
self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout.setObjectName("verticalLayout")
self.label_2 = QtWidgets.QLabel(self.groupBox)
# self.label_2.setStyleSheet("font-size: 24px;")
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout.addWidget(self.lineEdit)
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.tab)
self.groupBox_3.setObjectName("groupBox_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_3)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label_4 = QtWidgets.QLabel(self.groupBox_3)
# self.label_4.setStyleSheet("font-size: 24px;")
self.label_4.setObjectName("label_4")
self.verticalLayout_3.addWidget(self.label_4)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_3)
self.lineEdit_3.setObjectName("lineEdit_3")
self.verticalLayout_3.addWidget(self.lineEdit_3)
self.label = QtWidgets.QLabel(self.groupBox_3)
self.label.setObjectName("label")
self.verticalLayout_3.addWidget(self.label)
self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_3)
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout_3.addWidget(self.pushButton_3)
self.gridLayout.addWidget(self.groupBox_3, 0, 1, 1, 1)
self.groupBox_2 = QtWidgets.QGroupBox(self.tab)
self.groupBox_2.setObjectName("groupBox_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_3 = QtWidgets.QLabel(self.groupBox_2)
# self.label_3.setStyleSheet("font-size: 24px;")
self.label_3.setObjectName("label_3")
self.verticalLayout_2.addWidget(self.label_3)
self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_5.setObjectName("lineEdit_5")
self.verticalLayout_2.addWidget(self.lineEdit_5)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_2.setObjectName("lineEdit_2")
self.verticalLayout_2.addWidget(self.lineEdit_2)
self.pushButton_5 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_5.setObjectName("pushButton_5")
self.verticalLayout_2.addWidget(self.pushButton_5)
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_2)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout_2.addWidget(self.pushButton_2)
self.gridLayout.addWidget(self.groupBox_2, 1, 0, 1, 1)
self.groupBox_4 = QtWidgets.QGroupBox(self.tab)
self.groupBox_4.setObjectName("groupBox_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_4)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.label_5 = QtWidgets.QLabel(self.groupBox_4)
# self.label_5.setStyleSheet("font-size: 24px;")
self.label_5.setObjectName("label_5")
self.verticalLayout_4.addWidget(self.label_5)
self.pushButton_6 = QtWidgets.QPushButton(self.groupBox_4)
self.pushButton_6.setObjectName("pushButton_6")
self.verticalLayout_4.addWidget(self.pushButton_6)
self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox_4)
self.lineEdit_4.setObjectName("lineEdit_4")
self.verticalLayout_4.addWidget(self.lineEdit_4)
self.pushButton_4 = QtWidgets.QPushButton(self.groupBox_4)
self.pushButton_4.setObjectName("pushButton_4")
self.verticalLayout_4.addWidget(self.pushButton_4)
self.pushButton_7 = QtWidgets.QPushButton(self.groupBox_4)
self.pushButton_7.setObjectName("pushButton_7")
self.verticalLayout_4.addWidget(self.pushButton_7)
self.gridLayout.addWidget(self.groupBox_4, 1, 1, 1, 1)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.tabWidget.addTab(self.tab_2, "")
self.gridLayout_2.addWidget(self.tabWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 546, 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.groupBox.setTitle(_translate("MainWindow", "GroupBox1"))
self.label_2.setText(_translate("MainWindow", "Задача организации"))
self.lineEdit.setText(_translate("MainWindow", "Повседневная практика "))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.groupBox_3.setTitle(_translate("MainWindow", "GroupBox3"))
self.label_4.setText(_translate("MainWindow", "Задача организации"))
self.lineEdit_3.setText(_translate("MainWindow", "Не следует, однако забывать, что сложившаяся структура"))
self.label.setText(_translate("MainWindow", "Идейные соображения высшего порядка"))
self.pushButton_3.setText(_translate("MainWindow", "PushButton"))
self.groupBox_2.setTitle(_translate("MainWindow", "GroupBox2"))
self.label_3.setText(_translate("MainWindow", "Задача организации"))
self.lineEdit_5.setText(_translate("MainWindow", "С другой стороны сложившаяся "))
self.lineEdit_2.setText(_translate("MainWindow", "Идейные соображения высшего порядка"))
self.pushButton_5.setText(_translate("MainWindow", "PushButton"))
self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
self.groupBox_4.setTitle(_translate("MainWindow", "GroupBox4"))
self.label_5.setText(_translate("MainWindow", "Задача организации"))
self.pushButton_6.setText(_translate("MainWindow", "PushButton"))
self.lineEdit_4.setText(_translate("MainWindow", "Равным образом новая модель организационной"))
self.pushButton_4.setText(_translate("MainWindow", "PushButton"))
self.pushButton_7.setText(_translate("MainWindow", "PushButton"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))
class Window(QMainWindow, Ui_MainWindow): # +
def __init__(self):
super(Window, self).__init__()
# uic.loadUi('q1300782_scale.ui', self)
self.setupUi(self) # +
self.label.setWordWrap(True) # !!!
def resizeEvent(self, event):
w = self.size().width()
if w < 150:
f_s = 8
elif 150 <= w < 300:
f_s = 10
elif 300 <= w < 600:
f_s = 12
elif 600 <= w < 800:
f_s = 15
elif 800 <= w < 1000:
f_s = 20
elif 1000 <= w < 1200:
f_s = 25
elif w >= 1200:
f_s = 30
self.setStyleSheet(f"""
QLineEdit {{
background-color: #ccffbd;
font-size: {f_s-2}px;
}}
QLabel {{
background-color: #346751;
color: #ECDBBA;
font-size: {f_s+2}px;
}}
QPushButton {{
background-color: #185ADB;
color: #FFC947;
border-radius: 5px;
min-height: 20px;
font-size: {f_s}px;
}}
QGroupBox {{
color: #DA0037;
font-size: {f_s}px;
}}
""")
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())

