目的:希望QsciScintilla 可以具备屏蔽鼠标点击换行的功能。
作为解释器,希望在编辑模式,可以正常鼠标点击任意行编辑代码
在运行时,希望不响应鼠标点击,完全由解释器控制光标位置。
查找了半天文档
https://www.riverbankcomputing.com/static/Docs/QScintilla/classQsciScintilla.html
发现还是不能做到。
复习了一下qt的 signal slot 和 evnet 机制,两种机制并存,而event更底层。
而QsciScintilla 作为一种高级封装,各种mouseEvent 在QsciScintillaBase 里,没有作为signal,那么就需要自己继承,实现mouseEvent。
1 继承QsciScintilla
写一个my_sci.py
from PyQt5.Qsci import QsciScintilla class MyQsciScintilla(QsciScintilla): def __init__(self, parent): super(QsciScintilla, self).__init__(parent) self.disable_mouse = False def mousePressEvent(self, event): #print(event) #parent = self.parent() #pass if self.disable_mouse: pass else: super(QsciScintilla, self).mousePressEvent(event)
简单继承, 增加1个disable_mouse成员变量, 然后重写mousePressEvent。
还是很简单的。
2 在Qt Designer内使用自定义控件
下面的问题是,我布局用的是eric + Qt Designer。怎么在Designer设置自己写的这个类。(对于GUI程序,我还是比较喜欢所见即所得的方式的。)
方法也很简单:
从左边拖一个最基础的Widget,然后右键promote to
填入
MyQsciScintilla
my_sci
注意my_sci没有扩展名
然后Add promote 就可以了
然后在mainwindow里 修改这个控件的disable_mouse属性就可以啦。