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

使用wxPython的GLCanvas时鼠标点击事件被阻塞的问题

解决wxPython中GLCanvas鼠标点击事件无法实时响应的问题

问题场景

在macOS环境(Python 3.10、wxPython 4.2.1、PyOpenGL 3.1.7)下,创建包含GLCanvas的wxFrame应用,绑定EVT_LEFT_DOWN事件后,点击事件的打印信息无法实时输出,需等待程序关闭后才会一次性显示所有点击记录。

原因分析

并非主线程mainLoop阻塞事件分发,而是macOS系统下Python标准输出的行缓冲机制导致:GUI程序中print的输出不会实时刷新到终端,默认会累积到缓冲区,直到程序退出时才一次性释放。

解决方案

方案1:强制刷新单条print输出

修改MyCanvas类中的on_left_down方法,为print添加flush=True参数,强制实时刷新缓冲区:

def on_left_down(self, event):
    x, y = event.GetPosition()
    print(f"Mouse clicked at ({x}, {y})", flush=True)

方案2:全局设置无缓冲输出

在程序开头导入sys模块并修改标准输出配置,让所有输出实时刷新:

import sys
sys.stdout = sys.stdout.buffer.raw

# 后续原有代码...
import wx
from wx import glcanvas
# ...

验证效果

修改后重新运行程序,点击GLCanvas区域时,终端会实时打印点击坐标,无需等待程序关闭即可看到输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:06