You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Wacom数位板Python示例:PyQt QTabletEvent可用实现代码

使用PyQt的QTabletEvent处理Wacom数位板的Python示例

嘿,我刚好折腾出一个用PyQt的QTabletEvent处理Wacom数位板的Python示例,正好能解决你的需求!确实Wacom没有官方Python SDK,但PyQt的这个类完全能搞定数位板的核心输入——包括压力、倾斜、笔按钮这些关键参数,之前我也找了好久Python示例,终于自己捣鼓出可运行的Demo,分享给你:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QPainter, QPen, QColor
from PyQt5.QtCore import Qt

class TabletDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.last_pos = None
        self.pen_color = QColor(0, 0, 0)

    def initUI(self):
        self.setWindowTitle('Wacom数位板PyQt测试')
        self.setGeometry(100, 100, 800, 600)
        
        # 用来实时显示数位板参数的标签
        self.info_label = QLabel('移动数位笔来测试功能', self)
        self.info_label.setAlignment(Qt.AlignCenter)
        
        layout = QVBoxLayout()
        layout.addWidget(self.info_label)
        self.setLayout(layout)

    def tabletEvent(self, event):
        # 提取数位笔的核心参数
        pen_pressure = event.pressure()  # 压力值范围0.0-1.0
        pen_tilt_x = event.tiltX()      # X轴倾斜角度范围-60到60
        pen_tilt_y = event.tiltY()      # Y轴倾斜角度范围-60到60
        pen_button = event.button()     # 当前按下的笔按钮
        cursor_pos = event.pos()        # 光标在窗口内的位置

        # 更新参数显示标签
        info_text = (
            f"压力值: {pen_pressure:.2f}\n"
            f"X轴倾斜: {pen_tilt_x} | Y轴倾斜: {pen_tilt_y}\n"
            f"笔按钮状态: {'按下' if pen_button == Qt.LeftButton else '未按下'}\n"
            f"当前位置: ({cursor_pos.x()}, {cursor_pos.y()})"
        )
        self.info_label.setText(info_text)

        # 实现压力感应绘画:压力越大线条越粗
        if event.type() == event.TabletPress or event.type() == event.TabletMove:
            painter = QPainter(self)
            pen_width = pen_pressure * 10  # 把压力值映射到线条粗细
            pen = QPen(self.pen_color, pen_width, Qt.SolidLine, Qt.RoundCap)
            painter.setPen(pen)
            
            if self.last_pos:
                painter.drawLine(self.last_pos, cursor_pos)
            self.last_pos = cursor_pos
        elif event.type() == event.TabletRelease:
            self.last_pos = None

        event.accept()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = TabletDemo()
    demo.show()
    sys.exit(app.exec_())

说明一下这个Demo的功能:

  • 实时显示数位笔的压力值、倾斜角度、按钮状态和位置
  • 支持压力感应绘画,线条粗细会随你下笔的力度变化
  • 运行前确保已经安装PyQt5:pip install pyqt5,启动后用Wacom数位笔在窗口内操作就能看到效果

你可以根据自己的需求扩展这个Demo,比如添加颜色切换、橡皮擦功能,或者把绘画内容保存为图片之类的。

内容的提问来源于stack exchange,提问作者Roi Yozevitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:09:37