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

相关推荐
喵叔哟19 分钟前
重构代码之移动字段
java·数据库·重构
念白44323 分钟前
智能病历xml提取
数据库·sql·oracle
qingy_204627 分钟前
【JavaWeb】JavaWeb入门之XML详解
数据库·oracle
大数据面试宝典31 分钟前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
努力的小雨36 分钟前
快速上手 KSQL:轻松与数据库交互的利器
数据库·经验分享
Gentle58638 分钟前
labview中连接sql server数据库查询语句
数据库·labview
Gentle58639 分钟前
labview用sql server数据库存取数据到一个单元格
数据库·labview
qq_3129201141 分钟前
安装lua-nginx-module实现WAF功能
nginx·junit·lua
2401_8576363942 分钟前
共享汽车管理新纪元:SpringBoot框架应用
数据库·spring boot·汽车
菲兹园长42 分钟前
表的设计(MYSQL)
数据库·mysql