我在这个奇怪的问题上遇到了困难。我在我的项目中放置了一些 QLineEdit 小部件,并尝试通过单击它们来选择(突出显示)它们的所有文本。我已经有了这个工作,但后来我想将此功能扩展到同一 QLineEdit 父级的另一个类。我做了这个小界面:
class EditInterface(QtGui.QLineEdit):
def __init__(self, parent):
super(EditInterface, self).__init__(parent)
self.focus = False
self.setFocusPolicy(QtCore.Qt.StrongFocus)
def mousePressEvent(self, event):
ret = QtGui.QLineEdit.mousePressEvent(self, event)
if not self.focus:
self.selectAll()
self.focus=True
else:
self.deselect()
return ret
def focusInEvent(self,event):
self.focus=True
return QtGui.QLineEdit.focusInEvent(self,event)
def focusOutEvent(self,event):
self.focus=False
return QtGui.QLineEdit.focusOutEvent(self,event)
现在它根本不起作用。如果我只是这样做:
def mousePressEvent(self, event):
ret = QtGui.QLineEdit.mousePressEvent(self, event)
self.selectAll()
return ret
然后它工作正常,但我希望它能够启用其他鼠标活动,而不是一遍又一遍地选择所有内容。问题似乎出在 self.focus 变量上,但我没有使用 python 的经验,也不知道发生了什么。其他一切都在我的项目中运行良好,所以我将跳过在这里发布。提前致谢
编辑:我发现问题 根本不是关于继承,而是关于事件。focusInEvent 在 mousePressEvent 之前调用,因此不可能调用 selectAll()。