RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1369532
Accepted
aqua
aqua
Asked:2022-06-08 18:26:00 +0000 UTC2022-06-08 18:26:00 +0000 UTC 2022-06-08 18:26:00 +0000 UTC

将对象大小绑定到窗口大小

  • 772

在此处输入图像描述

如何以相同的纵横比将对象的大小绑定到窗口的大小Qt Designer,我试图通过 来完成Layouts,但我无法将一个对象叠加在另一个对象上。

同样在代码本身中,我尝试请求当前窗口大小并根据屏幕大小与原始屏幕大小的变化来缩放对象,但是.setGeometry()无法在方法中输入实数,并且在四舍五入时混合了对象.

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
import os


class Ui_Enrollee(object):
    def setupUi(self, Enrollee):
        Enrollee.setObjectName('Enrollee')
        Enrollee.resize(450, 800)
        Enrollee.setWindowTitle(' ')
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(os.getcwd() + '\\other\\design\\icon.png'))
        Enrollee.setWindowIcon(icon)
        Enrollee.setStyleSheet('background-color: #ffffff')
        self.WidgetsEnrollee = QtWidgets.QWidget(Enrollee)
        self.WidgetsEnrollee.setObjectName('WidgetsEnrollee')
        self.verticalScrollBar = QtWidgets.QScrollBar(self.WidgetsEnrollee)
        self.verticalScrollBar.setGeometry(QtCore.QRect(430, 95, 20, 690))
        self.verticalScrollBar.setStyleSheet('QScrollBar:vertical {\n'
'    border-radius: 10;\n'
'    border: 2px solid #3d3d3d;\n'
'    background: #595959;\n'
'}\n'
'QScrollBar::handle:vertical {\n'
'    border-radius: 8;\n'
'    background: #ffffff;\n'
'    min-width: 20px;\n'
'}\n'
'QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {\n'
'    border: none;\n'
'    background: none;\n'
'}\n'
'QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical{\n'
'    background: none;\n'
'}')
        self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
        self.verticalScrollBar.setObjectName('verticalScrollBar')
        self.label = QtWidgets.QLabel(self.WidgetsEnrollee)
        self.label.setGeometry(QtCore.QRect(45, 20, 360, 45))
        self.label.setStyleSheet('background-color: #595959;\n'
'border-radius: 22;\n'
'color: #ffffff;')
        self.label.setText('')
        self.label.setObjectName('label')
        self.ninth_grade = QtWidgets.QPushButton(self.WidgetsEnrollee)
        self.ninth_grade.setGeometry(QtCore.QRect(45, 20, 180, 45))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.ninth_grade.setFont(font)
        self.ninth_grade.setStyleSheet('background-color: #363636;\n'
'border-radius: 22;\n'
'color: #ffffff;\n'
'')
        self.ninth_grade.setObjectName('ninth_grade')
        self.eleventh_grade = QtWidgets.QPushButton(self.WidgetsEnrollee)
        self.eleventh_grade.setGeometry(QtCore.QRect(225, 20, 180, 45))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.eleventh_grade.setFont(font)
        self.eleventh_grade.setStyleSheet('background-color: #595959;\n'
'border-radius: 22;\n'
'color: #ffffff;')
        self.eleventh_grade.setObjectName('eleventh_grade')
        n = 1
        
        self.frame = QtWidgets.QLabel(self.WidgetsEnrollee)
        if 125 + 28 * (n - 1) > 745:
            self.frame.setGeometry(QtCore.QRect(15, 95, 400, 125 + 28 * (n - 1) - 35))
        else:
            self.frame.setGeometry(QtCore.QRect(15, 95, 400, 690))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.frame.setFont(font)
        self.frame.setStyleSheet('border-radius: 10;\n'
'border: 2px solid #3d3d3d;\n'
'color: #000000;')
        self.frame.setText('')
        self.frame.setIndent(10)
        self.frame.setObjectName('frame')
        self.math = QtWidgets.QLabel(self.WidgetsEnrollee)
        self.math.setGeometry(QtCore.QRect(265, 85, 70, 30))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.math.setFont(font)
        self.math.setStyleSheet('border-radius: 10;\n'
'border: 2px solid #3d3d3d;\n'
'color: #000000;')
        self.math.setAlignment(QtCore.Qt.AlignCenter)
        self.math.setIndent(0)
        self.math.setObjectName('math')
        self.ukrain = QtWidgets.QLabel(self.WidgetsEnrollee)
        self.ukrain.setGeometry(QtCore.QRect(340, 85, 70, 30))
        font = QtGui.QFont()
        font.setFamily('Montserrat')
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.ukrain.setFont(font)
        self.ukrain.setStyleSheet('border-radius: 10;\n'
'border: 2px solid #3d3d3d;\n'
'color: #000000;')
        self.ukrain.setAlignment(QtCore.Qt.AlignCenter)
        self.ukrain.setIndent(0)
        self.ukrain.setObjectName('ukrain')
        
        for i in range(n):
            self.name = QtWidgets.QLabel(self.WidgetsEnrollee)
            self.name.setGeometry(QtCore.QRect(43, 125 + 28 * i, 222, 30))
            font = QtGui.QFont()
            font.setFamily('Montserrat')
            font.setPointSize(9)
            font.setBold(True)
            font.setWeight(75)
            self.name.setFont(font)
            self.name.setStyleSheet('border: 2px solid #3d3d3d;\n'
    'color: #000000;')
            self.name.setText('')
            self.name.setIndent(10)
            self.name.setObjectName('name')
            self.grade_math = QtWidgets.QLabel(self.WidgetsEnrollee)
            self.grade_math.setGeometry(QtCore.QRect(263, 125 + 28 * i, 77, 30))
            font = QtGui.QFont()
            font.setFamily('Montserrat')
            font.setPointSize(9)
            font.setBold(True)
            font.setWeight(75)
            self.grade_math.setFont(font)
            self.grade_math.setStyleSheet('border: 2px solid #3d3d3d;\n'
    'color: #000000;')
            self.grade_math.setText('')
            self.grade_math.setIndent(10)
            self.grade_math.setObjectName('grade_math')
            self.grade_ukrain = QtWidgets.QLabel(self.WidgetsEnrollee)
            self.grade_ukrain.setGeometry(QtCore.QRect(338, 125 + 28 * i, 77, 30))
            font = QtGui.QFont()
            font.setFamily('Montserrat')
            font.setPointSize(9)
            font.setBold(True)
            font.setWeight(75)
            self.grade_ukrain.setFont(font)
            self.grade_ukrain.setStyleSheet('border: 2px solid #3d3d3d;\n'
    'color: #000000;')
            self.grade_ukrain.setText('')
            self.grade_ukrain.setIndent(10)
            self.grade_ukrain.setObjectName('grade_ukrain')
            self.num = QtWidgets.QLabel(self.WidgetsEnrollee)
            self.num.setGeometry(QtCore.QRect(15, 125 + 28 * i, 30, 30))
            font = QtGui.QFont()
            font.setFamily('Montserrat')
            font.setPointSize(9)
            font.setBold(True)
            font.setWeight(75)
            self.num.setFont(font)
            self.num.setStyleSheet('border: 2px solid #3d3d3d;\n'
    'color: #000000;')
            self.num.setText('')
            self.num.setIndent(10)
            self.num.setObjectName('num')
        Enrollee.setCentralWidget(self.WidgetsEnrollee)

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

    def retranslateUi(self, Enrollee):
        _translate = QtCore.QCoreApplication.translate
        self.ninth_grade.setText(_translate('Enrollee', 'button 1'))
        self.eleventh_grade.setText(_translate('Enrollee', 'button 2'))
        self.math.setText(_translate('Enrollee', 'TEXT 1'))
        self.ukrain.setText(_translate('Enrollee', 'TEXT 2'))


class MainWindow(QtWidgets.QMainWindow, Ui_Enrollee):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.bnts = QButtonGroup()
        self.bnts.setExclusive(True)
        self.bnts.addButton(self.eleventh_grade)
        self.bnts.addButton(self.ninth_grade)
        self.bnts.buttonClicked.connect(self.color_change)
        self.color_change(self.ninth_grade)

    def color_change(self, but):
        but.setStyleSheet('background-color: #363636;\nborder-radius: 22;\ncolor: #ffffff;\n')
        if but == self.eleventh_grade:
            self.ninth_grade.setStyleSheet('background-color: #595959;\nborder-radius: 22;\ncolor: #ffffff;\n')
        else:
            self.eleventh_grade.setStyleSheet('background-color: #595959;\nborder-radius: 22;\ncolor: #ffffff;\n')

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Window1 = MainWindow()
    Window1.show()
    sys.exit(app.exec_())

应用程序的 UI 模型可以在这里查看:ui 模型

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-06-09T05:27:21Z2022-06-09T05:27:21Z

    我不知道您在循环中绘制什么样的矩形以及它们的用途。我改为插入QTableWidget。

    跑:

    pyuic5 q1369532.ui -o q1369532_ui.py -x
    

    并运行main.py


    永远不要更改 Qt Designer 生成的代码。
    创建另一个从相应小部件继承的类,并使用生成的类来填充它。


    q1369532.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>450</width>
        <height>650</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QGridLayout" name="gridLayout">
        <item row="0" column="0">
         <widget class="QFrame" name="frame">
          <property name="frameShape">
           <enum>QFrame::StyledPanel</enum>
          </property>
          <property name="frameShadow">
           <enum>QFrame::Raised</enum>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout">
           <item>
            <widget class="QFrame" name="frame_2">
             <property name="minimumSize">
              <size>
               <width>200</width>
               <height>44</height>
              </size>
             </property>
             <property name="maximumSize">
              <size>
               <width>16777215</width>
               <height>44</height>
              </size>
             </property>
             <property name="styleSheet">
              <string notr="true">
    background-color: #595959;
    border-radius: 22;
    color: #ffffff;
    
    
    margin-left: 10px;
    margin-right: 10px;
    
    padding-left: -20px;
    padding-right: -20px;
    
    
    
    </string>
             </property>
             <property name="frameShape">
              <enum>QFrame::StyledPanel</enum>
             </property>
             <property name="frameShadow">
              <enum>QFrame::Raised</enum>
             </property>
             <layout class="QHBoxLayout" name="horizontalLayout_3">
              <property name="spacing">
               <number>0</number>
              </property>
              <property name="leftMargin">
               <number>0</number>
              </property>
              <property name="topMargin">
               <number>0</number>
              </property>
              <property name="rightMargin">
               <number>0</number>
              </property>
              <property name="bottomMargin">
               <number>0</number>
              </property>
              <item>
               <layout class="QHBoxLayout" name="horizontalLayout">
                <property name="spacing">
                 <number>0</number>
                </property>
                <property name="sizeConstraint">
                 <enum>QLayout::SetDefaultConstraint</enum>
                </property>
                <property name="leftMargin">
                 <number>0</number>
                </property>
                <item>
                 <widget class="QPushButton" name="ninth_grade">
                  <property name="maximumSize">
                   <size>
                    <width>16777215</width>
                    <height>42</height>
                   </size>
                  </property>
                  <property name="styleSheet">
                   <string notr="true">background-color: #363636;
    border-radius: 21px;
    color: #ffffff;</string>
                  </property>
                  <property name="text">
                   <string>Button 1</string>
                  </property>
                 </widget>
                </item>
                <item>
                 <widget class="QPushButton" name="eleventh_grade">
                  <property name="minimumSize">
                   <size>
                    <width>0</width>
                    <height>0</height>
                   </size>
                  </property>
                  <property name="maximumSize">
                   <size>
                    <width>16777215</width>
                    <height>42</height>
                   </size>
                  </property>
                  <property name="styleSheet">
                   <string notr="true">background-color: #595959;
    border-radius: 21px;
    color: #ffffff;
    
    </string>
                  </property>
                  <property name="text">
                   <string>Button 2</string>
                  </property>
                 </widget>
                </item>
               </layout>
              </item>
             </layout>
            </widget>
           </item>
           <item>
            <widget class="QFrame" name="frame_3">
             <property name="frameShape">
              <enum>QFrame::StyledPanel</enum>
             </property>
             <property name="frameShadow">
              <enum>QFrame::Raised</enum>
             </property>
             <layout class="QHBoxLayout" name="horizontalLayout_4">
              <property name="leftMargin">
               <number>0</number>
              </property>
              <property name="topMargin">
               <number>20</number>
              </property>
              <property name="rightMargin">
               <number>0</number>
              </property>
              <property name="bottomMargin">
               <number>0</number>
              </property>
              <item>
               <widget class="QFrame" name="frame_4">
                <property name="styleSheet">
                 <string notr="true">border: 2px solid #f0f;
    border-radius: 10;</string>
                </property>
                <property name="frameShape">
                 <enum>QFrame::StyledPanel</enum>
                </property>
                <property name="frameShadow">
                 <enum>QFrame::Raised</enum>
                </property>
               </widget>
              </item>
              <item>
               <widget class="QFrame" name="frame_5">
                <property name="maximumSize">
                 <size>
                  <width>21</width>
                  <height>16777215</height>
                 </size>
                </property>
                <property name="frameShape">
                 <enum>QFrame::StyledPanel</enum>
                </property>
                <property name="frameShadow">
                 <enum>QFrame::Raised</enum>
                </property>
                <layout class="QVBoxLayout" name="verticalLayout_2">
                 <property name="spacing">
                  <number>0</number>
                 </property>
                 <property name="leftMargin">
                  <number>0</number>
                 </property>
                 <property name="topMargin">
                  <number>0</number>
                 </property>
                 <property name="rightMargin">
                  <number>0</number>
                 </property>
                 <property name="bottomMargin">
                  <number>0</number>
                 </property>
                 <item>
                  <widget class="QScrollBar" name="verticalScrollBar">
                   <property name="minimumSize">
                    <size>
                     <width>20</width>
                     <height>220</height>
                    </size>
                   </property>
                   <property name="styleSheet">
                    <string notr="true">QScrollBar:vertical {
        border-radius: 10;
        border: 2px solid #3d3d3d;
        background: #595959;
    }
    QScrollBar::handle:vertical {
        border-radius: 8;
        background: #ffffff;
        min-width: 20px;
    }
    QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
        border: none;
        background: none;
    }
    QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical{
        background: none;
    }</string>
                   </property>
                   <property name="orientation">
                    <enum>Qt::Vertical</enum>
                   </property>
                  </widget>
                 </item>
                </layout>
               </widget>
              </item>
             </layout>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    主文件

    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import *
    
    from q1369532_ui import Ui_MainWindow
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self):
            super().__init__()
            self.setupUi(self) 
            
            self.widget = QtWidgets.QWidget(self.frame)   
            self.widget.setFixedSize(150, 30)
            self.h_layout = QtWidgets.QHBoxLayout(self.widget)
            self.h_layout.setContentsMargins(0, 0, 0, 0)
            
            self.math = QtWidgets.QLabel()
            self.math.setText('TEXT 1')
            self.math.setFixedSize(70, 30)
            font = QtGui.QFont()
            font.setFamily('Montserrat')
            font.setPointSize(9)
            font.setBold(True)
            font.setWeight(75)
            self.math.setFont(font)
            self.math.setStyleSheet('background-color: #fff; border-radius: 10;\n'
    'border: 2px solid #3d3d3d;\n'
    'color: #000000;')
            self.math.setAlignment(QtCore.Qt.AlignCenter)
            self.math.setIndent(0)
            self.math.setObjectName('math')
            
            self.ukrain = QtWidgets.QLabel()
            self.ukrain.setText('TEXT 2')
            self.ukrain.setFixedSize(70, 30)
            font = QtGui.QFont()
            font.setFamily('Montserrat')
            font.setPointSize(9)
            font.setBold(True)
            font.setWeight(75)
            self.ukrain.setFont(font)
            self.ukrain.setStyleSheet('background-color: #fff; border-radius: 10;\n'
    'border: 2px solid #3d3d3d;\n'
    'color: #000000;')
            self.ukrain.setAlignment(QtCore.Qt.AlignCenter)
            self.ukrain.setIndent(0)
            self.ukrain.setObjectName('ukrain')        
            
            self.h_layout.addWidget(self.math)
            self.h_layout.addWidget(self.ukrain)
    
            self.eleventh_grade.clicked.connect(self.color_change)
            self.ninth_grade.clicked.connect(self.color_change)
            self.ninth_grade.click()
            
            self.frame_4.setStyleSheet('''
                background-color: #fff; 
                border-radius: 10px; 
                border: 2px solid #f0f;
            ''')
    
            self.h_layout_2 = QtWidgets.QHBoxLayout(self.frame_4)
            self.h_layout_2.setContentsMargins(0, 20, 0, 4)        
            
            self.tableWidget = QTableWidget(5, 4)
            self.col_headers = ['A', 'Hello', 'World', 'D',]
            self.tableWidget.setHorizontalHeaderLabels(self.col_headers)
            self.tableWidget.verticalHeader().hide()
            self.tableWidget.setAlternatingRowColors(True)
            self.tableWidget.horizontalHeader().setSectionResizeMode(
                QtWidgets.QHeaderView.Stretch)
    
            self.tableWidget.setStyleSheet('border: 1px; border-radius: 10px;')
            self.h_layout_2.addWidget(self.tableWidget)
            
        def color_change(self):
            but = self.sender()
            but.setStyleSheet('''
                background-color: #363636; 
                color: #ffffff;
                border-radius: 21px;
            ''')
            if but == self.eleventh_grade:
                self.ninth_grade.setStyleSheet('''
                    background-color: #595959; 
                    color: #ffffff;
                    border-radius: 21px;
                ''') 
            else:
                self.eleventh_grade.setStyleSheet('''
                    background-color: #595959; 
                    color: #ffffff;
                    border-radius: 21px;
                ''')        
            
        def resizeEvent(self, event):
            self.widget.move(self.size().width() - 215, 67)
            
    
    Stylesheet = """
    QHeaderView {
        background:transparent; 
        color: #00f;
        font: 75 14pt 'MS Shell Dlg 2';
    } 
    QHeaderView::section {border: 0;}
    """        
    
    
    if __name__ == '__main__':
        import sys
        app = QtWidgets.QApplication(sys.argv)
        
        app.setStyleSheet(Stylesheet)            
        
        Window1 = MainWindow()
        Window1.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述

    在此处输入图像描述

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5