Масштабирование элементов на форме PyQt5

Структура одной из моих вкладок на QTabWidget выглядит примерно так:

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

Остальные вкладки виджета уже адаптивные, следовательно эту я также хочу сделать адаптивной. Если её можно растянуть в длину, то в высоту здесь растягивать нечего.

Поэтому я решила, что можно просто масштабировать все элементы при изменении размера формы и уже задавала такой вопрос, но после него у меня возникли новые вопросы:

  1. При добавлении любых styleSheet (даже пустых, например QLineEdit { }) код self.setFont(...) не срабатывает и self.font.setPointSize(...) тоже.

  2. Возможно ли масштабировать все элементы, кроме текста на QTabWidget?

  3. Есть ли другие варианты, как правильно обеспечить адаптивность на подобных вкладках?

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 шт):

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

Попробуйте так:

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

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

→ Ссылка