很早之前就开始遇到这个问题,就是在给label设置背景的时候,总感觉这个属性没有用,今天才发现这个属性是需要和调色板结合起来一起使用才行,下面先看下这段代码:
#初始化标签控件
lable1.setText("文本标签")
lable1.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.Window, Qt.red)
lable1.setPalette(palette)
lable1.setAlignment(Qt.AlignCenter)
上面的显示结果如下图 :
解释下上面的代码,setAutoFillBackground(True)
表示的是自动填充背景,如果想使用后面的代码。这里必须要设置为True
palette = QPalette()
,这里是实例化一个调色板对象,大家可以这样考虑,你想给label设置背景那么肯定需要一个颜色器来生成,这里的QPalette就是这个颜色器
palette.setColor(QPalette.Window, Qt.red)
这里就是颜色器设置颜色
lable1.setPalette(palette)
这里就是想颜色器上的颜色整合到label上去
当然这样的话是可以设置label的背景颜色,但是只能设置红绿蓝这些基本的颜色,在项目开发的时候肯定是设置自定义的详细颜色,那么我们可以采取下面的方法设置:
background_color = QColor()
background_color.setNamedColor('#282821')
#初始化标签控件
lable1.setText("文本标签")
lable1.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.Window, background_color)
lable1.setPalette(palette)
lable1.setAlignment(Qt.AlignCenter)
其实大家也可以看到
background_color = QColor() background_color.setNamedColor(‘#282821’)
这两句就是在设置我们的自定义颜色值
palette.setColor(QPalette.Window, background_color)
这个就是应用我们的颜色值,具体效果如下图:
import PyQt5
import sys
import requests
from PyQt5.QtGui import QPalette, QPixmap, QColor
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QApplication
from PyQt5.QtCore import Qt
# http://imgs.technews.cn/wp-content/uploads/2014/10/Baidu.jpg
class WindowDemo(QWidget):
def __init__(self):
super().__init__()
lable1 = QLabel(self)
lable2 = QLabel(self)
lable3 = QLabel(self)
lable4 = QLabel(self)
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1516814788757&di=b719cdd79b84b6f563a36617911e2cf8&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20180112%2Ff309b61eb3bd44e6956948de77f78ec3.jpg'
req = requests.get(url)
photo = QPixmap()
photo.loadFromData(req.content)
background_color = QColor()
background_color.setNamedColor('#282821')
#初始化标签控件
lable1.setText("文本标签")
lable1.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.Window, background_color)
lable1.setPalette(palette)
lable1.setAlignment(Qt.AlignCenter)
lable2.setText("欢迎使用PythonGUI应用")
lable3.setAlignment(Qt.AlignCenter)
lable3.setToolTip("这个一个图片标签")
lable3.setPixmap(photo)
lable4.setText("WelCome to Baidu")
lable4.setAlignment(Qt.AlignRight)
lable4.setToolTip("这是一个超链接标签")
lable4.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(QPalette.Window, Qt.red)
lable4.setPalette(palette)
lable4.setAlignment(Qt.AlignCenter)
vbox = QVBoxLayout()
vbox.addWidget(lable1)
vbox.setStretch(1,1)
vbox.addWidget(lable2)
vbox.setStretch(1, 1)
# vbox.addStretch()
vbox.addWidget(lable3)
vbox.setStretch(1, 1)
# vbox.addStretch()
# vbox.addStretch()
vbox.addWidget(lable4)
#允许label1访问超链接
lable1.setOpenExternalLinks(True)
#允许label4访问超链接并且打开浏览器访问,设置了False则不会访问网页
lable4.setOpenExternalLinks(True)
lable4.linkActivated.connect(link_clicked)
lable2.linkHovered.connect(link_hovered)
lable1.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.setLayout(vbox)
self.setWindowTitle("例子")
def link_clicked():
print("鼠标点击了label标签")
def link_hovered():
print("鼠标画过了lable2标签")
if __name__=="__main__":
app = QApplication(sys.argv)
win = WindowDemo()
win.show()
app.exit(app.exec_())