找回密码
 立即注册
Qt开源社区 门户 查看内容

PyQt 编程入门(四)

2019-7-19 17:22| 发布者: admin| 查看: 945| 评论: 0

摘要: 本例涉及到QWidget类样式表(StyleSheet)的应用和QFrame类边表框和样式的设置。QWidget类及其子类包含所有可显示的控件;QFrme子类包含QAbstractScrollArea, QLabel, QLCDNumber, QSplitter, QStackedWidget 和 QTool ...
本例涉及到QWidget类样式表(StyleSheet)的应用和QFrame类边表框和样式的设置。QWidget类及其子类包含所有可显示的控件;QFrme子类包含QAbstractScrollArea, QLabel, QLCDNumber, QSplitter, QStackedWidget 和 QToolBox。本例仅以QLable作为例子讲解。

setStyleSheet方法可以设定背景色,前景色,还可以设置字体和鼠标悬停时的前景色。StyleSheet中的简单的颜色可以用'red','green','blue'等表示,复杂的颜色可以用RGB色,可以是三个参数,分别代表红(R),绿(G),蓝(B)三个分量的值(0~255的整数),也可以带第四个参数α,表征不透明度(0~255的整数)。

label.setStyleSheet("QLabel{background:rgb(250,0,50);}"
    "QLabel{color:rgb(50,250,100,100);font-size:15px;font-weight:bold;font-family:Roman times;}"   

    "QLabel:hover{color:rgb(0,250,100,250);}")

QFrme.setFrameShadow() 可设定控件的样式,参数有:

QFrame.Plain#默认为平的,

QFrame.Sunken #下陷,

QFrame.Raised #凸起。

QFrme.setFrameShape() 可设定控件的形状,常见的参数有:

QFrame.NoFrame#无边框

QFrame.Box#仅边框

QFrame.Panel#整个范围

还可以用setFrameStyle(QFrame.Panel|QFrame.Raised)这种形式同时设定上述两种参数。

在有边框的时,setLineWidth(n)可以设定边框的线宽。

程序的效果如下图:



代码如下:

# _*_ coding:utf-8_*_
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class MyWidget(QWidget):#创建一个QWidget的 子类
    def __init__(self,parent = None):#初始化函数
        super().__init__(parent)#调用基类的初始化函数
        self.initUI()

    def initUI(self):
        labels = list()
        glayout = QGridLayout()
        rows, cols = 3, 3
        for i in range(rows):
            for j in range(cols):
                label = QLabel(u"Label%s"%(cols*i+j+1))
                if i == 0:
                     label.setFrameShadow(QFrame.Plain)#默认
                     label.setToolTip("QFrame.Plain")#设置鼠标悬停时的提示
                elif i == 1:
                    label.setFrameShadow(QFrame.Raised)#凸起
                    label.setToolTip("QFrame.Raised")
                else:
                    label.setFrameShadow(QFrame.Sunken)#下陷
                    label.setToolTip("QFrame.Sunken")               
                if j ==0:
                    label.setFrameShape(QFrame.NoFrame)#默认无表框

                    #通过样式表设置背景色,前景颜色和字体, 以及鼠标悬停时的前景颜色
                    label.setStyleSheet("QLabel{background:rgb(250,0,50);}"
                                         "QLabel{color:rgb(50,250,100,100);font-size:15px;font-weight:bold;font-family:Roman times;}"
                                         "QLabel:hover{color:rgb(0,250,100,250);}")
                elif j ==1:
                    label.setFrameShape(QFrame.Box)#仅边缘
                    label.setFixedWidth(80)
                elif j ==2:
                    label.setFrameShape(QFrame.Panel)#整个范围
                    label.setFixedSize(100,40)

                #label.setFrameStyle(QFrame.Panel|QFrame.Raised)
                label.setLineWidth(3)#设置边框线宽
                labels.append(label)
                glayout.addWidget(label,i,j,1,1)
               
        self.setLayout(glayout)
        self.setGeometry(500,300,600,400)# 设置坐标x, y 以及宽和高。.move() 和.resize() 的综合
        self.setWindowTitle(u'颜色,Lable的样式')#设置self (MyWidget实例)的窗口标题

if __name__== '__main__':
    app= QApplication(sys.argv)
    widget= MyWidget()
    widget.show() #显示到屏幕
    sys.exit(app.exec_())


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:Python编程 pyqt matplotlib,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了