Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置绘图文本的背景色?_Python_Pyqt_Pyqt5_Qlabel - Fatal编程技术网

Python 如何设置绘图文本的背景色?

Python 如何设置绘图文本的背景色?,python,pyqt,pyqt5,qlabel,Python,Pyqt,Pyqt5,Qlabel,我想为文本设置背景,这意味着我想设置包含文本的矩形的颜色。我已经测试了QPainter.setBackground,但它不起作用。这是我的代码: import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * class MyLabel(QLabel): def __init__(self): super(MyLabel, self).__init

我想为文本设置背景,这意味着我想设置包含文本的矩形的颜色。我已经测试了QPainter.setBackground,但它不起作用。这是我的代码:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class MyLabel(QLabel):
    def __init__(self):
        super(MyLabel, self).__init__()
        self.setMinimumHeight(200)
        self.setMinimumWidth(200)

    def paintEvent(self, QPaintEvent):
        super(MyLabel, self).paintEvent(QPaintEvent)
        pos = QPoint(50, 50)
        painter = QPainter(self)

        brush = QBrush()
        brush.setColor(QColor(255,0,0))

        painter.setBackgroundMode(Qt.OpaqueMode)
        painter.setBackground(brush)

        painter.drawText(pos, 'hello,world')

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        layout = QHBoxLayout(self)
        self.label = MyLabel()
        layout.addWidget(self.label)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
我想要的是:


感谢您的帮助。

没有必要实现个性化的QLabel,通过Qt样式表设置背景色就足够了,如果您想建立特定位置,也不要使用布局

导入系统 从PyQt5导入QtCore、QtGui、QtWidgets 类窗口(qtwidts.QWidget): 定义初始化(自): 超级(窗口,自我)。\uuuu初始化 self.label=qtwidts.QLabel(“你好,世界”,self) self.label.adjustSize() self.label.setStyleSheet( “背景色:{};”.format(QtGui.QColor(255,0,0).name()) ) self.label.move(QtCore.QPoint(50,50)) 如果名称=“\uuuuu main\uuuuuuuu”: app=qtwidts.QApplication(sys.argv) window=window() 窗口。调整大小(640480) window.show() sys.exit(app.exec_())
我只是好奇,为什么不将window.resize()调用作为self.resize()放在window的初始化例程中??除非绝对必要,否则保持类的所有元素都是自包含的不是更好吗?还有,如果你什么都不做,为什么还要包括sys.argv?@DennisJensen这是一个品味问题,所以在里面或外面都不违反任何设计原则。@DennisJensen你可以传递sys.argv或list()或[],遵循同样的原则,另一方面,我有使用sys.argv的坏/好习惯,因为有时我想传递其他标志,例如,在Qt WebEngine中,我可以启用远程调试,或者我也可以指向样式或QS,而无需修改代码HMM将东西封装在自己内部是一种很好的设计原则,上次我查看时;)至于sys.argv,由于任何原因,在函数中实现您不打算使用的东西是一个坏习惯,实际上,这只会增加不必要的复杂性,可能会导致混乱——比如现在他为什么要包括这一点,他似乎并没有在使用它,但也许我错了,我只是没有发现他在哪里使用它——这种事情我只提到这一点,因为人们经常来到这里,然后养成习惯(好的或坏的)在那些提供答案的人中,如果一个人知道最好不要这样做,那么分享那些对他们有不良影响的答案对我来说似乎是一种伤害