首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGridLayout前面的Qlabel

QGridLayout前面的Qlabel
EN

Stack Overflow用户
提问于 2018-02-22 20:22:58
回答 2查看 942关注 0票数 2

我试图使QLabel在上显示为QGridLayout,但我想不出怎么做。

这是一个示例代码:

代码语言:javascript
复制
from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QFrame, QLabel
import sys

class Foo(QWidget):

    def __init__(self):
        super().__init__()



        grid_layout = QGridLayout()

        rect1 = QLabel('RECT1')
        rect1.setStyleSheet("color: green;")
        grid_layout.addWidget(rect1, 0, 1)

        rect2 = QLabel('RECT2')
        rect2.setStyleSheet("color: blue;")
        grid_layout.addWidget(rect2, 0, 2)

        self.setLayout(grid_layout)
        self.show()

app = QApplication(sys.argv)
foo = Foo()
sys.exit(app.exec_())

它产生以下输出:

例如,我希望以红色创建另一个QLabel,并将其显示在图像的中心:

代码语言:javascript
复制
red_label = QLabel('red')
red_labe.setStyleSheet("font-size:20pt; color: red;");

就像这样:

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-22 20:36:53

一种可能的解决方案是使red_label成为QWidget的儿子,因此在创建对象时必须传递self参数。此外,QLabel必须更改窗口的大小,模拟其布局任务将创建将在resizeEvent事件中发射的信号:

代码语言:javascript
复制
import sys

from PyQt5 import QtCore, QtWidgets


class Foo(QtWidgets.QWidget):
    sizeChanged = QtCore.pyqtSignal(QtCore.QSize)

    def __init__(self):
        super().__init__()
        grid_layout = QtWidgets.QGridLayout(self)

        rect1 = QtWidgets.QLabel("RECT1")
        rect1.setStyleSheet("color: green;")
        grid_layout.addWidget(rect1, 0, 1)

        rect2 = QtWidgets.QLabel("RECT2")
        rect2.setStyleSheet("color: blue;")
        grid_layout.addWidget(rect2, 0, 2)

        red_label = QtWidgets.QLabel("red", self)
        red_label.setAlignment(QtCore.Qt.AlignCenter)
        red_label.setStyleSheet("font-size: 20pt; color: red;")

        self.sizeChanged.connect(red_label.resize)

    def resizeEvent(self, event):
        self.sizeChanged.emit(event.size())
        super().resizeEvent(event)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    foo = Foo()
    foo.show()
    sys.exit(app.exec_())

票数 2
EN

Stack Overflow用户

发布于 2018-02-22 20:55:24

这可能不太优雅的解决方案,但它确实保持红色标记居中,因为窗口是调整大小。

代码语言:javascript
复制
class Foo(QWidget):

    def __init__(self):
        super().__init__()


        grid_layout = QGridLayout()

        rect1 = QLabel('RECT1')
        rect1.setStyleSheet("color: green;")
        grid_layout.addWidget(rect1, 0, 0)

        rect2 = QLabel('RECT2')
        rect2.setStyleSheet("color: blue;")
        grid_layout.addWidget(rect2, 0, 2)


        grid_layout_two = QGridLayout()

        blank_label = QLabel()

        red_label = QLabel('red')
        red_label.setStyleSheet("font-size:20pt; color: red;")
        grid_layout_two.addWidget(blank_label, 0, 0)
        grid_layout_two.addWidget(red_label, 0, 1)
        grid_layout_two.addWidget(blank_label, 0, 2)

        grid_layout_three = QGridLayout()
        grid_layout_three.addItem(grid_layout, 0, 0)
        grid_layout_three.addItem(grid_layout_two, 0, 0)

        self.setLayout(grid_layout_three)
        self.show()

app = QApplication(sys.argv)
foo = Foo()
sys.exit(app.exec_())

基本上是做三个网格布局,定位元素,使红色标签位于其他两个标签的中心,但位于其他标签布局前面的网格布局中。

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

https://stackoverflow.com/questions/48936548

复制
相关文章

相似问题

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