文章目录
相关信息目录 (实际功能类组件)
组件名称 | 所属基类 | 介绍 | 用途 |
---|---|---|---|
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 的默认值为 0 | margin() |
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.AlignLeft | 0x0001 | 靠左 |
Qt.AlignLeading | 同Qt.AlignLeft, | |
Qt.AlignRight | 0x0002 | 靠右 |
Qt.AlignTrailing | 同Qt.AlignRight, | |
Qt.AlignHCenter | 0x0004 | 横向居中 |
Qt.AlignJustify | 0x0008 | |
Qt.AlignAbsolute | 0x0010 |
其中可选参数及其所需值如下:
- AlignHorizontal_Mask = AlignLeft | AlignRight | AlignHCenter | AlignJustify | AlignAbsolute
- AlignVertical_Mask = AlignTop | AlignBottom | AlignVCenter | AlignBaseline
- AlignCenter = AlignVCenter | AlignHCenter //横向 纵向 居中
Qt.TextFormat
名称 | 解释 |
---|---|
Qt.PlainText | 纯文本 |
Qt.RichText | 富文本 |
Qt.AutoText | 自动 |
Qt.MarkdownText | markdown文本 |
Qt.TextInteractionFlags
名称 | 对应内部数值 | 解释 |
---|---|---|
Qt.NoTextInteraction | 0 | 没有文本交互:只有展示的功能 |
Qt.TextSelectableByMouse | 1 | 文本可以被鼠标选择 |
Qt.TextSelectableByKeyboard | 2 | 可以操纵键盘,文本栏会出现光标,不能删除,但是按上下左右按键,光标可以跟着文本移动,鼠标无法操作 |
Qt.LinksAccessibleByMouse | 4 | 可由鼠标访问的链接 |
Qt.LinksAccessibleByKeyboard | 8 | 可由键盘操作访问的链接 |
Qt.TextEditable | 16 | 文本可编辑 |
其中需要参数及其可选值分别是: |
- TextEditorInteraction = TextSelectableByMouse | TextSelectableByKeyboard TextEditable
- TextBrowserInteraction = TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard
写在后面
由于制作时间较紧 , 文中有些代码是作者君当场手打的还没有来得及进行运行测试 , 如果大家发现书写有误的地方还希望能在评论区指出来帮助我及时改正