光标在PyQT中消失了

时间:2013-01-02 14:15:47

标签: python pyqt4 onfocus

我有一个包含多个QRowWidget的窗口,这是我定义的自定义窗口小部件。这些QRowWidget包含QLineEdit个和其他标准小部件。为了显示或隐藏QRowWidget的某些部分,我过度定义了其中所有小部件的focusInEvent()方法。它完美无缺,当我点击QRowWidget时,会出现隐藏的元素。

奇怪的是,闪烁的光标线hovewer没有出现在自定义小部件的QLineEdit中。我可以通过鼠标单击或Tab键选择它们,发光效果表示在其中选择QLineEdit,我可以在其中选择文本,或者在我点击的任何位置开始输入,但是光标永远不会出现,而且很烦人。

我的第一个想法是它是Mac上的一个错误,但我在SuSe Linux上有相同的经验。

我正在使用python 2.7和PyQt4。

这是__init__()的{​​{1}}:

QRowWidget

然后这是自己的 for i in self.findChildren(QWidget): i.focusInEvent = self.focusInEvent

focusInEvent()

1 个答案:

答案 0 :(得分:1)

我怀疑你覆盖它时没有拨打原始focusInEvent()。您的功能应该类似于:

 def focusInEvent(self,...):
     QParent.focusInEvent(self,...)
     # the rest of your code

其中QParent是您的小部件最近的基类。

要么是这样,要么确保在focusInEvent()小部件上调用QLineEdit作为功能的一部分。

鉴于评论,听起来您在自定义小部件中的动态上动态重新分配focusInEvent函数。我会为你使用的每个小部件创建一个派生类,只是覆盖focusInEvent,如上所述,或者包含一行如

type(self).focusInEvent(self,..)

你的功能。