pyqt5-Ctrl+鼠标滚轮实现文本区文字大小调整

技术简介

在 PyQt5 中,你可以使用 QTextEditwheelEvent 方法和 QKeyEventkey() 方法来检测 Ctrl 键和鼠标滚轮事件,从而实现按下 Ctrl 键并滚动鼠标滚轮时,调整 QTextEdit 的字体大小。

这个示例中,我们创建了一个窗口,并在窗口中添加了一个 QTextEdit 组件。然后,我们重新实现了窗口的 wheelEvent 方法来捕捉鼠标滚轮事件。在滚轮事件中,我们通过 QApplication.keyboardModifiers() 方法检测是否按下了 Ctrl 键。如果按下了 Ctrl 键,我们将根据滚轮方向调整 QTextEdit 的字体大小;否则,我们使用默认的滚轮事件处理

示例代码

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit
from PyQt5.QtGui import QKeySequence
from PyQt5.QtCore import Qt


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle("Ctrl+鼠标滚轮设置字体大小")
        self.setGeometry(100, 100, 600, 400)

        # 创建 QTextEdit 组件
        self.text_edit = QTextEdit(self)
        self.text_edit.setGeometry(50, 50, 500, 300)

    def wheelEvent(self, event):
        # 捕捉鼠标滚轮事件
        modifiers = QApplication.keyboardModifiers()
        
        if modifiers == Qt.ControlModifier:
            # 如果按下了 Ctrl 键
            delta = event.angleDelta().y()
            font = self.text_edit.font()

            # 根据滚轮方向调整字体大小
            if delta > 0:
                font.setPointSize(font.pointSize() + 1)
            else:
                font.setPointSize(font.pointSize() - 1)

            self.text_edit.setFont(font)
        else:
            # 如果没有按下 Ctrl 键,则使用默认滚轮事件处理
            super().wheelEvent(event)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

pyqt5-Ctrl+鼠标滚轮实现文本区文字大小调整_第1张图片 

QTextEdit重写代码

# 多行文本框
class TextEdit(QTextEdit):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFont(standard_font)  # 设置标准字体
    
    # Ctrl+鼠标滚轮调整字体大小
    def wheelEvent(self, event):
        # 捕捉鼠标滚轮事件
        modifiers = QApplication.keyboardModifiers()

        if modifiers == Qt.ControlModifier:
            # 如果按下了 Ctrl 键
            delta = event.angleDelta().y()
            font = self.font()

            # 根据滚轮方向调整字体大小
            if delta > 0:
                font.setPointSize(font.pointSize() + 1)
            else:
                font.setPointSize(font.pointSize() - 1)

            self.setFont(font)
        else:
            # 如果没有按下 Ctrl 键,则使用默认滚轮事件处理
            super().wheelEvent(event)

你可能感兴趣的:(PyQt5,qt,python)