• 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属性就可以啦。 

  • 相关阅读:
    HttpServletResponse对象
    FastJSON 简介及其Map/JSON/String 互转(转载)
    commons-lang3-3.4类库
    HttpClient相关
    JSON.parse()方法 (转载)
    textview用法--推荐
    每日总结
    百度网盘
    每日总结
    每日总结
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/13796771.html
Copyright © 2020-2023  润新知