首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5将QLabel插入QLabel

PyQt5将QLabel插入QLabel
EN

Stack Overflow用户
提问于 2022-08-24 19:07:47
回答 2查看 87关注 0票数 0

我正在尝试创建一个接口,并希望在Qlabel中插入qlabel和Qbutton,同时像QVBoxLayout和QHBoxLayout一样保留调整大小的功能。

这是我想要完成的,但随着规模的改变,就像QVBoxLayout和QHBoxLayout一样。

我的代码:

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(604, 460)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame = QtWidgets.QFrame(Form)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 9)
        self.verticalLayout_2.setSpacing(0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setStyleSheet("QLabel {\n"
"background-color: #09102a;\n"
" }")
        self.label.setText("")
        self.label.setObjectName("label")
        self.verticalLayout_2.addWidget(self.label)
        self.frame_2 = QtWidgets.QFrame(self.frame)
        self.frame_2.setMaximumSize(QtCore.QSize(16777215, 70))
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_2)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_2 = QtWidgets.QLabel(self.frame_2)
        self.label_2.setMinimumSize(QtCore.QSize(120, 60))
        self.label_2.setMaximumSize(QtCore.QSize(120, 60))
        self.label_2.setStyleSheet("QLabel {\n"
"    font: 75 13pt \"MS Shell Dlg 2\";\n"
"    padding-right :5px;\n"
"    padding-left :5px;\n"
"    image: url(:/icons/images/icons/battery-monitoring.png);\n"
"    image-position: left;\n"
"    background-color: #171d3c;\n"
"    border-radius :20px;\n"
"    color: rgb(255, 255, 255);\n"
" }")
        self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout.addWidget(self.label_2)
        self.label_3 = QtWidgets.QLabel(self.frame_2)
        self.label_3.setMinimumSize(QtCore.QSize(120, 60))
        self.label_3.setMaximumSize(QtCore.QSize(120, 60))
        self.label_3.setStyleSheet("QLabel {\n"
"    font: 75 13pt \"MS Shell Dlg 2\";\n"
"    padding-right :5px;\n"
"    padding-left :5px;\n"
"    image: url(:/icons/images/icons/battery-charger.png);\n"
"    image-position: left;\n"
"    background-color: #171d3c;\n"
"    border-radius :20px;\n"
"    color: rgb(255, 255, 255);\n"
" }")
        self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout.addWidget(self.label_3)
        self.verticalLayout_2.addWidget(self.frame_2)
        self.verticalLayout.addWidget(self.frame)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_2.setText(_translate("Form", "label 2"))
        self.label_3.setText(_translate("Form", "label 1"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

在执行代码之后,我得到了以下内容:

我想得到的结果。当屏幕放大时,所有元素都必须就位,这不能由QVBoxLayout和QHBoxLayout完成。

EN

回答 2

Stack Overflow用户

发布于 2022-09-04 20:43:17

对于PyQt6..。我用这个“黑客”来做你要做的事,因为我没有适当的技能,所以我用QLabels做任何事情。

代码语言:javascript
复制
from PyQt6           import QtCore, QtWidgets
from PyQt6.QtCore    import QEvent, QObject, pyqtSignal
import sys

class Trigger(QObject):
    event_highjack = pyqtSignal()

    def __init__(s, eventparent, master_fn=None, resize=False, move=False, mousebutton=False, close=None, fn=None):
        super().__init__(eventparent)
        for enum in [k for k,v in {14:resize, 13:move, 19:close, 2:mousebutton}.items() if v]:
            s.eventtype = QEvent.type(QEvent(enum))
        s.master_fn = master_fn or fn
        s._widget = eventparent
        s.widget.installEventFilter(s)
        if s.master_fn:
            s.event_highjack.connect(s.master_fn)

    @property
    def widget(s):
        return s._widget

    def eventFilter(s, widget, event) -> bool:
        if widget == s._widget and event.type() == s.eventtype:
            s.event_highjack.emit()
        return super().eventFilter(widget, event)

class Main(QtWidgets.QMainWindow):
    def __init__(s, *args, **kwargs):
        super().__init__(styleSheet='background:black;color:white', *args, **kwargs)
        s.show()

        label = QtWidgets.QLabel(s, styleSheet='background:magenta')
        label.show()

        def follow_master():
            label.setGeometry(10,10,s.width()-20,s.height()-20)

        Trigger(s, resize=True, fn=follow_master)

if '__main__' in __name__:
    app = QtWidgets.QApplication(sys.argv)
    window = Main()
    app.exec()
票数 0
EN

Stack Overflow用户

发布于 2022-09-05 09:08:41

我会使用Qt设计器来创建guis。你可以随心所欲地放置所有的东西,并让它随你的意愿移动。另外,gui编码和python编码是分开的,然后它更容易维护。您可以用uic.loadUi加载gui (r“yourgui.ui”,self)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73478454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档