PyQt技巧分享与总结

文章目录

一、经常用到的控件总结

1、布局

(1)垂直布局

right_layout = QVBoxLayout()

(2)水平布局

main_layout = QHBoxLayout()

以上这两种好像没什么需要叙述的,布局控件可以让界面看起来更美观,并且在拖动以及最大最小化的时候,免受窗口变形的影响。

2、按钮

api: QPushButton

使用方法:

python 复制代码
self.load_button = QPushButton('加载图片')					# 创建按钮
self.load_button.clicked.connect(self.load_image)			# 将按钮链接到load_image方法(函数)
imageload_layout.addWidget(self.load_button)				# 添加到布局

3、单行文本框

api: QLineEdit

使用方法:

python 复制代码
self.status_input = QLineEdit()								# 创建状态框
imageload_layout.addWidget(self.status_input)				# 添加到布局
right_layout.addLayout(imageload_layout)					# 添加到布局

注释:

QLineEdit 是 Qt 框架中的一个类,用于创建一个单行文本框。Qt 是一个广泛使用的跨平台图形用户界面(GUI)库,QLineEdit 是其中的一个控件,用于接收和显示用户输入的文本。它可以用于各种应用程序中,例如表单输入、搜索框、过滤器等。

QLineEdit 的基本特性

复制代码
文本输入:允许用户输入单行文本。
显示文本:可以显示文本,并允许用户编辑。
占位符文本:可以设置占位符文本,提示用户应该输入什么内容。
文本格式化:支持设置文本格式,例如密码模式(即隐藏文本)或限制输入字符类型。
信号和槽机制:支持 Qt 的信号和槽机制,可以用来响应文本改变、焦点变化等事件。

常用方法和属性

复制代码
 setText(text):设置文本框的文本。
 text():获取文本框中的文本。
 setPlaceholderText(text):设置占位符文本。
 setReadOnly(bool):设置文本框是否只读。
 setEchoMode(mode):设置回显模式,例如设置为 QLineEdit.Password 可以隐藏输入的文本(用于密码输入)。

4、QLabel文本显示

api: QLabel('Hello, World!')

使用方法:

(1)显示文本:

python 复制代码
label = QLabel('Hello, World!')

(2)显示图像:

你可以使用 QLabel 来显示图像,通过设置其 pixmap 属性来加载图像文件。

python 复制代码
from PyQt5.QtGui import QPixmap
label = QLabel()
pixmap = QPixmap('image.png')
label.setPixmap(pixmap)

(3)富文本

QLabel 支持 HTML 格式的文本,可以用来显示格式化文本,例如带有不同字体颜色或样式的文本。

python 复制代码
label = QLabel('<b>Hello, <font color="red">World!</font></b>')

(4)文本对齐

你可以设置 QLabel 中文本的对齐方式(如左对齐、右对齐、居中对齐等)。

python 复制代码
label.setAlignment(Qt.AlignCenter)

5、QTextEdit文本编辑

api: text_edit = QTextEdit()

python 复制代码
text_edit.setText("This is a QTextEdit widget.")

二、插件使用

1、图片阅读器方法

python 复制代码
class ImageViewer(QGraphicsView):
    def __init__(self):
        super().__init__()
        self.setRenderHint(QPainter.Antialiasing)				# 启用抗锯齿,减少图像边缘的锯齿状效果
        self.setRenderHint(QPainter.SmoothPixmapTransform)		# 启用平滑图像变换,避免图像在缩放的时候出现模糊和失真
        self.setScene(QGraphicsScene())							# 这是用于显示图像项的容器
        self.image_item = None									# 
        self.setDragMode(QGraphicsView.ScrollHandDrag)			# 	允许用户通过拖动视图来滚动查看图像。
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)	# 禁用水平和垂直滚动条
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

    def load_image(self, file_path):							# 定义一个名为 load_image 的方法,用于加载图像
        pixmap = QPixmap(file_path)								# 创建一个 QPixmap 对象 pixmap,从指定的文件路径加载图像。
        # 如果 image_item 已经存在(即当前有图像显示在视图中),则从场景中移除该图像项,以准备显示新图像。
        if self.image_item:										
            self.scene().removeItem(self.image_item)
        self.image_item = self.scene().addPixmap(pixmap)		# 将新的图像项添加到场景中
        # 置图像项的变换模式为 Qt.SmoothTransformation,以确保图像在缩放时的平滑效果。
        self.image_item.setTransformationMode(Qt.SmoothTransformation)	
        # 设置场景的矩形区域 sceneRect 为图像的矩形区域,确保整个图像在视图中可见。
        self.setSceneRect(QRectF(pixmap.rect()))
        # 调整视图的缩放级别,使图像在视图中适合显示,同时保持图像的纵横比
        self.fitInView(self.sceneRect(), Qt.KeepAspectRatio)
	# 重写 wheelEvent 方法以处理鼠标滚轮事件。event 是 QWheelEvent 对象,表示滚轮事件的详细信息。
    def wheelEvent(self, event: QWheelEvent):
        factor = 1.2
        if event.angleDelta().y() < 0:
            factor = 1 / factor
        self.scale(factor, factor)
	# 
    def mousePressEvent(self, event: QMouseEvent):
        if event.button() == Qt.LeftButton and (event.modifiers() & Qt.ControlModifier):
            self.setDragMode(QGraphicsView.ScrollHandDrag)
        else:
            super().mousePressEvent(event)

    def mouseReleaseEvent(self, event: QMouseEvent):
        if event.button() == Qt.LeftButton and (event.modifiers() & Qt.ControlModifier):
            self.setDragMode(QGraphicsView.NoDrag)
        else:
            super().mouseReleaseEvent(event)
            
 class MainWindow(QMainWindow):
 	def __init__(self):
 		......
 		self.image_viewer = ImageViewer()
        main_layout.addWidget(self.image_viewer, 3)
        right_layout = QVBoxLayout()
 		......
	def load_image(self):
        file_path, _ = QFileDialog.getOpenFileName(self, 'Open Image File', '', 'Images (*.png *.xpm *.jpg *.bmp)')
        if file_path:
            self.image_viewer.load_image(file_path)
            self.status_input.setText(file_path)
            self.textbox.append("加载状态:image\n图片路径:{}".format(file_path))

这个代码定义了一个自定义的 QGraphicsView 子类,名为 ImageViewer。它用于显示和操作图像,提供了基本的图像查看功能和一些用户交互的自定义行为。

ImageViewer 继承自 QGraphicsView。设置了抗锯齿和光滑变换的渲染提示,以提高图像的显示质量。创建了一个空的 QGraphicsScene 用于显示图像。初始化时禁用了水平和垂直滚动条,并设置了拖动模式为 ScrollHandDrag

相关推荐
蜡笔小炘33 分钟前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长37 分钟前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
JoySSLLian1 小时前
手把手教你安装免费SSL证书(附宝塔/Nginx/Apache配置教程)
网络·人工智能·网络协议·tcp/ip·nginx·apache·ssl
Re.不晚1 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设1 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据2 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300962 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_736919102 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
亓才孓2 小时前
[JDBC]PreparedStatement替代Statement
java·数据库
m0_466525293 小时前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全