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

相关推荐
杨江15 分钟前
ThingsBoard安装测试
服务器·数据库
mit6.82424 分钟前
[Redis#4] string | 常用命令 | + mysql use:cache | session
数据库·redis·后端·缓存
vvw&1 小时前
如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack
linux·运维·nginx·ubuntu·elk·elasticsearch·开源项目
Beekeeper&&P...1 小时前
map和redis关系
数据库·redis·缓存
jianqimingtian1 小时前
如何使用 Matlab 制作 GrabCAD 体素打印切片
数据结构·数据库
真真假假々1 小时前
MySQL和ADSDB
数据库·mysql
秦老师Q2 小时前
MySQL第二章 sql约束与sql数据类型
数据库·sql·mysql
不是二师兄的八戒2 小时前
mysql in查询大数据量业务无法避免情境下优化
数据库·mysql
苹果醋32 小时前
vue3 在哪些方便做了性能提升?
java·运维·spring boot·mysql·nginx
----云烟----2 小时前
Qt获取文件夹下的文件个数(过滤和不过滤的区别)
数据库·qt