我正在使用“PyQt4”开发一个桌面应用程序。该应用程序包含一个在Qscintilla上实现的XML编辑器。但是,每当我单击通过指示器定义的类似于超级链接的文本时,我都会遇到一个问题。调用了“indicatorClicked”事件,但是当我在其中执行“SCI_GOTOLINE”API时,它会正确地转到需要的行,但不幸的是,由于某种原因,它会从被单击的文本位置选择文本,直到目标行。对我来说,似乎鼠标没有得到释放!我还尝试使用“indicatorrelease”事件,但运气不佳!你知道怎么解决这个问题吗? 这是我挂指标释放事件:
self.__editor.indicatorReleased.connect(self.__on_indicator_released)
事件处理程序只是调用SCI_GOTOLINE API到某个行号:
def __on_indicator_released(self, line_number, index, keys):
self.__editor.SendScintilla(QsciScintilla.SCI_GOTOLINE, line_number)
问题来源StackOverflow 地址:/questions/59380763/executing-sci-gotoline-api-of-qscintilla-inside-indicatorreleased-event-hand
我收到了来自@Matic Kukovec & @K的回复。Mulier在另一条线上。我把它贴在这里,这样其他人可以从中受益。 @Matic Kukovec回复我:“有两种解决方案:使用QTimer。在经过短暂的延迟(我使用50ms)后,在indicatorrelease事件中执行SCI_GOTOLINE,或者在indicatorrelease事件中使用:while mouse_state != data.Qt。NoButton: PyQt5.QTest.qWait(1)等待,直到没有muse按钮被按下,然后执行SCI_GOTOLINE。 在尝试了这两种方法之后,基于singleshot的解决方案产生了效果: 连接到一个indicator_release处理程序:
self.__editor.indicatorReleased.connect(self.__on_indicator_released)
相应的事件处理程序:
def __on_indicator_released(self, line_number, index, keys):
QTimer.singleShot(50, lambda: self.__go_to_line(line_number))
调用SCI_GOTOLINE in go_to_line API:
def __go_to_line(self, line_number):
self.__editor.SendScintilla(QsciScintilla.SCI_GOTOLINE, line_number)
但是,基于mouse_state的解决方案不起作用,因为mouse_button始终等于“Qt.NoButton”。
mouse_state = QtCore.QCoreApplication.instance().mouseButtons()
while mouse_state != Qt.NoButton:
mouse_state = QtCore.QCoreApplication.instance().mouseButtons()
QTest.qWait(1)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。