PyQt5 窗口崩溃:mouseMoveEvent 函数为何失效?
mousemoveevent 谜样崩溃
在上述 pyqt5 程序中,mousemoveevent 函数的执行导致了窗口崩溃。错误调试显示“'mwindow' object has no attribute 'mouse_x'”,这表明该变量在 mousemoveevent 中未定义。
深入研究后,发现问题的根源在于 mousepressevent 函数中缺少一个条件判断。在该函数中,mousex 和 mousey 变量初始化为鼠标全局坐标,但如果没有先按下鼠标,这些变量将保持未初始化状态。
当触发 mousemoveevent 时,mousex 和 mousey 变量的值为 none,导致对它们的进一步引用引发属性错误。在 mousereleaseevent 中不会出现此问题,因为在松开鼠标之前,mousex 和 mousey 已经得到正确赋值。
解决方案
为了解决这个问题,需要在 mousepressevent 函数中添加一个条件判断,以检查鼠标是否已被按下:
def mousePressEvent(self, evt) : if evt.button() == Qt.LeftButton: self.mousex = evt.globalX() self.mousey = evt.globalY() self.btn_x = self.btn.x() self.btn_y = self.btn.y()
此更改确保了 mousex 和 mousey 只有在鼠标左键按下时才被赋值,防止在鼠标未按下时这些变量未定义。这样,程序现在应该能够在不崩溃的情况下执行 mousemoveevent。
以上就是PyQt5 窗口崩溃:mouseMoveEvent 函数为何失效?的详细内容,更多请关注其它相关文章!