PyQt5 实际功能类组件 之 QLabel

相关信息目录 (实际功能类组件)

组件名称所属基类介绍用途
QLabel标签,划定一块区域,显示信息,捕捉处理各种事件显示图片,文字,处理各种鼠标或者键盘事件
QLineEdit单行输入框获取用户输入(限制为一行),显示文本信息
QTextEdit提供一个方形编辑框提供给用户编辑框,显示富文本
QPushButton按钮(相比QLinel来说,使用它的优点是它已经针对按钮的功能做过优化,例如点击后状态的改变,以及方便的添加图标,这些功能使用QLabel时往往需要自己定义)接收鼠标点击事件
QCheckBox选择框提供一个选择框,可让用户选择
QSpinBox数字框获取整型数字,方便的限制数字的最大值与最小值
QDoubleSpinBox浮点数框与QSpinBox类似获取浮点数
QComboBox下拉选择框提供信息供用户选择
QFontComboBox字体选择框提供控件来选择字体

其他还有很多其他的组件吧 , 但是一般这几个够用了 ,其他不常用的就稍后补充吧

正文 QLabel

方法浏览

方法名解释用法是否常用
actionEvent(self, *args, **kwargs)
alignment(self)
buddy(self)
changeEvent(self, QEvent)
childEvent(self, *args, **kwargs)
clear(self)
closeEvent(self, *args, **kwargs)
connectNotify(self, *args, **kwargs)
contextMenuEvent(self, QContextMenuEvent)
create(self, *args, **kwargs)
customEvent(self, *args, **kwargs)
destroy(self, *args, **kwargs)
disconnectNotify(self, *args, **kwargs)
dragEnterEvent(self, *args, **kwargs)
dragLeaveEvent(self, *args, **kwargs)
dragMoveEvent(self, *args, **kwargs)
drawFrame(self, *args, **kwargs)
dropEvent(self, *args, **kwargs)
enterEvent(self, *args, **kwargs)
event(self, QEvent)
focusInEvent(self, QFocusEvent)
focusNextChild(self, *args, **kwargs)
focusNextPrevChild(self, bool)
focusOutEvent(self, QFocusEvent)
focusPreviousChild(self, *args, **kwargs)
hasScaledContents(self)
hasSelectedText(self)
heightForWidth(self, p_int)
hideEvent(self, *args, **kwargs)
indent(self)
initPainter(self, *args, **kwargs)
initStyleOption(self, *args, **kwargs)
inputMethodEvent(self, *args, **kwargs)
isSignalConnected(self, *args, **kwargs)
keyPressEvent(self, QKeyEvent)
keyReleaseEvent(self, *args, **kwargs)
leaveEvent(self, *args, **kwargs)
linkActivated(self, p_str)
linkHovered(self, p_str)
margin(self)
metric(self, *args, **kwargs)
minimumSizeHint(self)
mouseDoubleClickEvent(self, *args, **kwargs)
mouseMoveEvent(self, QMouseEvent)
mousePressEvent(self, QMouseEvent)
mouseReleaseEvent(self, QMouseEvent)
moveEvent(self, *args, **kwargs)
movie(self)
nativeEvent(self, *args, **kwargs)
openExternalLinks(self)
paintEvent(self, QPaintEvent)
picture(self)
pixmap(self)
receivers(self, *args, **kwargs)
resizeEvent(self, *args, **kwargs)
selectedText(self)
selectionStart(self)
sender(self, *args, **kwargs)
senderSignalIndex(self, *args, **kwargs)
setAlignment(self, Union, Qt_Alignment=None, Qt_AlignmentFlag=None)
setBuddy(self, QWidget)
setIndent(self, p_int)
setMargin(self, p_int)
setMovie(self, QMovie)
setNum(self, *__args)
setOpenExternalLinks(self, bool)
setPicture(self, QPicture)
setPixmap(self, QPixmap)
setScaledContents(self, bool)
setSelection(self, p_int, p_int_1)
setText(self, p_str)
setTextFormat(self, Qt_TextFormat)
setTextInteractionFlags(self, Union, Qt_TextInteractionFlags=None, Qt_TextInteractionFlag=None)
setWordWrap(self, bool)
sharedPainter(self, *args, **kwargs)
showEvent(self, *args, **kwargs)
sizeHint(self)
tabletEvent(self, *args, **kwargs)
text(self)
textFormat(self)
textInteractionFlags(self)
timerEvent(self, *args, **kwargs)
updateMicroFocus(self, *args, **kwargs)
wheelEvent(self, *args, **kwargs)
wordWrap(self)

常用方法

方法功能对应属性
文字相关
setText(p_str)设置文字text()
setAlignment(Qt.AlignmentFlag)设置对齐方式,其值为附录中Qt.AlignmentFlag中值之一alignment()
setWordWrap(bool)设置自动换行wordWrap()
setIndent(p_int)设置文本的缩进量indent
setSelection(p_int, p_int)设置选中内容(字符序号到字符序号)selectedText(无选中内容返回空)
hasSelectedText()是否有内容选中(返回true或false)selectedText(无选中内容返回空)
setMargin(p_int)内容与边框之间的距离(边距),margin 的默认值为 0margin()
setTextFormat(Qt.TextFormat)设置文本类型,它的传入值应为附录中Qt.TextFormat中值之一textFormat()
setTextInteractionFlags(Qt.TextInteractionFlags)指定标签在显示文本时应如何与用户输入交互,接收的值为附录中 Qt.TextInteractionFlags 列出的值(可多选多项)textInteractionFlags()
链接相关
setOpenExternalLinks(bool)默认false,当为true时点击链接直接自动打开而不是触发linkActivated()信号openExternalLinks()
图片相关
setPixmap(QPixmap)清空QLabel设置QPixmap图片pixmap()
setScaledContents(bool)缩放其内容以填充所有可用空间,可用来设置图片自适应大小scaledContents返回true或false,默认为false
setPicture(QPicture)清空QLabel设置QPicture图片picture()
动图gif相关
setMovie(QMovie)加载并显示一个QMovie实例movie()
其他
setNum(int num or double num)清空QLabel内容,改为显示num(整数或小数).

常用功能代码

设置图片

法一 QPixmap
pix = QPixmap('sexy.jpg') # 从文件构建一个QPixmap实例
lab1el = QLabel()

lab1el.setPixmap(pix)
法二 使用qss(setStyleSheet)
lab1el = QLabel()
lab1el.setStyleSheet("border-image:url(sexy.jpg);") # 图片自适应填充
lab1el.setStyleSheet("background-image:url(sexy.jpg);") # 不会自适应
法三 setPicture
'''
类型 描述 QPixmap 专门为绘图设计的,在绘制图片时需要使用QPixmap QImage 提供了一个与硬件无关的图像表示函数,可以用于图片像素级访问 QPicture 是一个绘图设备类,它继承自QPainter类,可以使用QPainter的begin()函数在QPicture上绘图,使用end()函数结束绘图,使用QPicture的save()函数将QPainter所使用的绘图指令保存在文件中 QBitmap 是一个继承自QPixmap的简单类,它提供了1bit深度的二值图像的类,QBitmap提供的单色图像,可以用来制作游标(QCursor),或者笔刷(QBrush)
'''
picture = QPicture()
painter = QPainter()
painter.begin(picture)            # 在picture中绘画
painter.drawEllipse(10,20, 80,70) # draw an ellipse
painter.end()                     # 结束绘图
# picture.save("drawing.pic") # 保存
lab1el = QLabel()
label.setPicture(picture)
法四 从内存中加载图片
from PIL import Image
import io
import base64

'''
思路&步骤:
从内存中加载图片
base64编码数组首先解码为字节码
使用io.BytesIO(img_b64decode) 封装成流格式
使用PIL的Image加载图片
使用Image的toqpixmap() 函数转换为QPixmap
使用QLabel的setPixmap方法,将pix赋值给QLabel进行绘制
'''

def set_img_on_label(lab1el,img_b64):
	img_b64decode = base64.b64decode(img_b64) #[21:]
    img_io = io.BytesIO(img_b64decode)
    img=Image.open(img_io)
    pix = img.toqpixmap()
    lab1el.setScaledContents(True) # 自适应QLabel大小
    lab1el.setPixmap(pix)

设置gif动图

movie = QMovie("../picture/loading.gif")
label.setMovie(movie)
movie.start()
'''
相关
QMovie实例能用setPaused(bool)暂停动画的播放,false恢复播放,true暂停播放。
stop()停止动画的播放。

QMovie有3个状态,NotRunning,Paused,Running,每个状态发生改变时都会发射stateChanged()信号。可以关联这些信号,来改变播放按钮的状态。
'''

设置富文本

# QT是支持HTML的,同样setText也支持HTML格式文文
lab1el = QLabel()
label.setText("<p style='color:red;'>这是一段html的红色文字</p>")

设置超链接

法一 信号槽绑定方式
//设置超链接并绑定信号槽
linkLabel = QLabel()
linkLabel.setText('<a href="http://www.cnblog.com/fron_csl"')
linkLabel.linkActivated.connect(openUrl)

//槽函数实现
def openUrl(QString url):
	QDesktopServices.openUrl(QUrl(url));
	# 若是文件路径,则需使用下面的打开方式,具体可参见QUrl帮助文档
 	QDesktopServices.openUrl(QUrl("file:///" + url))
法二 通过设置QLabel属性实现超链接(此方法不需要绑定信号槽,比较简单)
linkLabel = QLabel()
linkLabel.setOpenExternalLinks(True)
linkLabel.setText('<a href=\"http://www.cnblog.com/fron_csl\">http://www.cnblog.com/fron_csl</a>')

# QT是支持HTML的,以下设置有效
# 1,设置超链接颜色
linkLabel.setText("<a style='color: green;' href='http://www.cnblog.com/fron_csl'>http://www.cnblog.com/fron_csl</a>")

# 2,去掉超链接下面的下划线

linkLabel.setText("<style> a {text-decoration: none} </style> <a href=\"http://www.cnblog.com/fron_csl\">linkLabel</a>");
设置链接颜色:
linkLabel.setText(QString.fromLocal8Bit("<a style='color: green;' href = www.doshow.com> 查看</a>"));

获取选中

# label为定义的QLabel实例
if label.hasSelectedText(): # 判断是否有选中内容
    selectedText = label.selectedText() # 获取选中内容

自定义可拖动的Label

class Label(QLabel):
    def __init__(self,parent = None):
        super(Label,self).__init__(parent)
        self.moveSign = False
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.moveSign = True
            self.mouse_x = event.globalX()
            self.mouse_y = event.globalY()
            # print(self.mouse_x, self.mouse_y)
            self.origin_x = self.x()
            self.origin_y = self.y()

    def mouseReleaseEvent(self, event):
        self.moveSign = False

    def mouseMoveEvent(self, event):
        if self.moveSign:
            # print(event.globalX(), event.globalY())
            move_x = event.globalX() - self.mouse_x
            move_y = event.globalY() - self.mouse_y

            dest_x = self.origin_x + move_x
            dest_y = self.origin_y + move_y
            # 计算并限定组件面板不超出窗口范围
            self.move(dest_x, dest_y)
            self._position = [self.x(),self.y()]
            self.exchangeInformation()

附录(常用方法中涉及的枚举值)

Qt.AlignmentFlag

名称对应内部数值解释
Qt.AlignLeft0x0001靠左
Qt.AlignLeading同Qt.AlignLeft,
Qt.AlignRight0x0002靠右
Qt.AlignTrailing同Qt.AlignRight,
Qt.AlignHCenter0x0004横向居中
Qt.AlignJustify0x0008
Qt.AlignAbsolute0x0010

其中可选参数及其所需值如下:

  1. AlignHorizontal_Mask = AlignLeft | AlignRight | AlignHCenter | AlignJustify | AlignAbsolute
  2. AlignVertical_Mask = AlignTop | AlignBottom | AlignVCenter | AlignBaseline
  3. AlignCenter = AlignVCenter | AlignHCenter //横向 纵向 居中

Qt.TextFormat

名称解释
Qt.PlainText纯文本
Qt.RichText富文本
Qt.AutoText自动
Qt.MarkdownTextmarkdown文本

Qt.TextInteractionFlags

名称对应内部数值解释
Qt.NoTextInteraction0没有文本交互:只有展示的功能
Qt.TextSelectableByMouse1文本可以被鼠标选择
Qt.TextSelectableByKeyboard2可以操纵键盘,文本栏会出现光标,不能删除,但是按上下左右按键,光标可以跟着文本移动,鼠标无法操作
Qt.LinksAccessibleByMouse4可由鼠标访问的链接
Qt.LinksAccessibleByKeyboard8可由键盘操作访问的链接
Qt.TextEditable16文本可编辑
其中需要参数及其可选值分别是:
  1. TextEditorInteraction = TextSelectableByMouse | TextSelectableByKeyboard TextEditable
  2. TextBrowserInteraction = TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard

写在后面

由于制作时间较紧 , 文中有些代码是作者君当场手打的还没有来得及进行运行测试 , 如果大家发现书写有误的地方还希望能在评论区指出来帮助我及时改正

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

盧瞳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值