pyqt 扩展QsciScintilla disable mouse select

目的:希望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属性就可以啦。 

 

posted @ 2020-10-11 11:48  永远的幻想  阅读(388)  评论(0编辑  收藏  举报