在容器groupBox内的label实现全屏显示以及groupBox和label布局之间关系的探讨

本文介绍了如何在Qt环境中,通过重定义QLabel类并结合groupBox,实现在groupBox内的label双击触发全屏显示和退出全屏功能。关键在于理解label与groupBox的布局关系,并通过正确的布局管理确保全屏后label能正确返回原位置。代码示例展示了如何在groupBox中设置label的双击事件及布局调整。
摘要由CSDN通过智能技术生成

我目前已经实现了在QWidget用label双击全屏和在graphicsView里双击全屏,而今天发现在最后加入软件里时的label是在groupBox里,经过几个小时的尝试,最后终于成功,而成功的基础就是理解label与groupBox之间的关系。虽然笔者也不是特别理解,但是用于使用全屏功能的实现已经是足够了。下面便是笔者的界面:

 因为双击实现全屏是需要是在label内部实现的,所以这里我们需要重新定义一个label类,实现代码很简单,我之前的两篇文章已经解释过了,这里就不再赘述,感兴趣可以点击上面的两篇图文看一下。

class Label(QtWidgets.QLabel):
    def __init__(self,ui):
        super(Label,self).__init__()
        self.flag = True
        self.setMaximumSize(400,400)  #锁死label的大小,防止它由于paintevent发生难以控制的缩放
        self.setMinimumSize(400,400)

    def mouseDoubleClickEvent(self, event):
        self.w = self.width()  #获得label自身的宽高
        self.h = self.height()
        if self.flag == True:
            print(1)
            self.setWindowFlags(QtCore.Qt.Window)  #使得label位于最高级别的窗口
            self.showFullScreen()  #全屏显示
            self.flag = False
        else:
            print(2)
            self.setWindowFlags(QtCore.Qt.SubWindow)   #使得label回到子窗口级别
            self.resize(self.w,self.h)   #使得label宽高恢复原样
            self.showNormal()   #恢复label原本大小
            self.flag = True

当然仅有上面的这个类还是无法实现整体功能的,因为我们肯定会为整个界面施加布局的,但是如果施加布局的过程不正确就会出现label全屏了但是双击回来后却突然发现label自己独立于原本的窗口或者覆盖的原本的窗口。

这里就是要探讨一下关于容器和label之间的布局了,我们知道由于重新定义了label,无法直接使得label和容器groupBox之间产生联系,也就是的作为子窗口恢复的label无法找到自己原本的位置,这也就是为什么label会在全屏缩小后发现label独立于窗口了。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(800, 535)
        self.gridLayout_7 = QtWidgets.QGridLayout(Form)
        self.gridLayout_7.setObjectName("gridLayout_7")
        self.gridLayout_6 = QtWidgets.QGridLayout()
        self.gridLayout_6.setObjectName("gridLayout_6")
        self.groupBox = QtWidgets.QGroupBox(Form)
        self.groupBox.setTitle("")
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label = Label(self.groupBox)
        self.label.setObjectName("label")
        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
        self.gridLayout_6.addWidget(self.groupBox, 0, 0, 1, 1)
        self.groupBox_2 = QtWidgets.QGroupBox(Form)
        self.groupBox_2.setTitle("")
        self.groupBox_2.setObjectName("groupBox_2")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox_2)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.label_2 = Label(self.groupBox_2)
        self.label_2.setObjectName("label_2")
        self.gridLayout_3.addWidget(self.label_2, 1, 0, 1, 1)
        self.gridLayout_6.addWidget(self.groupBox_2, 0, 1, 1, 1)
        self.groupBox_3 = QtWidgets.QGroupBox(Form)
        self.groupBox_3.setTitle("")
        self.groupBox_3.setObjectName("groupBox_3")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_3)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.label_3 = Label(self.groupBox_3)
        self.label_3.setObjectName("label_3")
        self.gridLayout_4.addWidget(self.label_3, 0, 0, 1, 1)
        self.gridLayout_6.addWidget(self.groupBox_3, 1, 0, 1, 1)
        self.groupBox_4 = QtWidgets.QGroupBox(Form)
        self.groupBox_4.setTitle("")
        self.groupBox_4.setObjectName("groupBox_4")
        self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_4)
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.label_4 = Label(self.groupBox_4)
        self.label_4.setObjectName("label_4")
        self.gridLayout_5.addWidget(self.label_4, 1, 1, 1, 1)
        self.gridLayout_6.addWidget(self.groupBox_4, 1, 1, 1, 1)
        self.gridLayout_7.addLayout(self.gridLayout_6, 0, 0, 2, 1)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout_7.addWidget(self.pushButton, 0, 1, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout_7.addWidget(self.pushButton_2, 1, 1, 1, 1)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "label1"))
        self.label_2.setText(_translate("Form", "label2"))
        self.label_3.setText(_translate("Form", "label3"))
        self.label_4.setText(_translate("Form", "label4"))
        self.pushButton.setText(_translate("Form", "PushButton"))
        self.pushButton_2.setText(_translate("Form", "PushButton"))

而这里就体现了布局的作用了,我的界面是在四个groupBox设置了栅栏布局,然后又给整个界面设置了栅栏布局,往往这样看似就可以了,但是由于我们重新定义了label类致使designer自动生成的代码里label和gruopBox无联系,所以我们需要在groupBox里加上栅栏布局使得label和groupBox之间产生关联,确定label在主窗口的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋冬晚归客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值