在容器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在主窗口的位置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以通过设置groupBox的样式表(StyleSheet)来取消边框。具体操作如下: 1. 在Qt Designer中选中groupBox控件。 2. 在右侧属性栏中找到样式表(StyleSheet)属性,并点击旁边的编辑按钮。 3. 在样式表编辑器中添加以下代码: ``` QGroupBox { border: none; } ``` 4. 点击确定按钮保存样式表,然后预览效果。 现在groupBox控件应该没有边框了。 ### 回答2: groupBox一个用于包含其他控件的容器控件,在 Windows Forms 中常用于创建和管理用户界面。groupBox 控件通常具有边框,用于界定该控件的边界。 如果想要取消 groupBox 的边框,可以通过以下步骤实现: 1. 打开 Visual Studio 中的窗体设计器,找到包含 groupBox 的窗体。 2. 在窗体设计器中选中该 groupBox 控件。 3. 访问 groupBox 的属性面板,可以通过右键单击 groupBox 控件并选择 "属性" 或者在属性窗口中找到该控件。 4. 在属性面板的 "BorderStyle" 属性中,将其值设置为 "None",即 "无"。 5. 保存并运行程序,groupBox 的边框将会被取消。 注意事项: - 取消 groupBox 的边框后,该控件的边界将不再可见,因此需要确保 groupBox 中的控件布局与界面设计的要求一致。 - 此方法只适用于 Windows Forms 应用程序,若使用其他界面库或技术,可能有不同的实现方式。 取消 groupBox 边框可以使界面看起来更加简洁和统一,根据具体的界面设计要求,可以根据需要选择是否取消 groupBox 的边框。 ### 回答3: groupBox(组框)是一种用于界面设计的控件,常用于将相关的控件集合在一起,以便以一种有组织的方式呈现给用户。通常,groupBox会自动包含一个边框,以突出显示其边界。然而,在某些情况下,我们可能需要取消groupBox的边框。 要取消groupBox的边框,可以采取以下步骤: 1. 打开界面设计器,确保groupBox已选中。 2. 在属性窗口中找到"BorderStyle"(边框样式)属性。 3. 将"BorderStyle"属性的值设置为"None"(无)。 通过设置边框样式为"None",groupBox的边框将被隐藏起来,从而达到取消边框的效果。 在某些情况下,取消groupBox的边框可能有助于提升界面的美观性和用户体验。例如,当groupBox的内部控件与背景色相同或与其它元素紧密排列时,取消边框可以使整个界面看起来更加一体化和流畅。 总之,取消groupBox的边框只需要简单地设置边框样式属性为"None"。这样,我们就可以根据需要定制和调整groupBox的外观来实现更好的界面效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秋冬晚归客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值