Курсор исчез в PyQT
У меня есть окно, содержащее несколько QRowWidget
s, которые являются пользовательскими виджетами, определенными мной. Эти QRowWidget
с содержат QLineEdit
s и другие стандартные виджеты. Чтобы показать или скрыть определенные части QRowWidget
Я переопределил focusInEvent()
Методы всех виджетов в нем. Это отлично работает, когда я нажимаю на QRowWidget
появляются скрытые элементы.
Странная вещь в том, что мигающая строка курсора не появляется в QLineEdit
s внутри пользовательских виджетов. Я могу выбрать их как щелчком мыши, так и с помощью Tab, а эффект свечения указывает, что QLineEdit
в нем я могу выделить текст или начать печатать в любом месте, где бы я ни щелкнул, но курсор никогда не появляется, и это довольно раздражает.
Сначала я подумал, что это ошибка на Mac, но у меня такой же опыт на SuSe Linux.
Я использую Python 2.7 и PyQt4.
Это в __init__()
из QRowWidget
:
for i in self.findChildren(QWidget):
i.focusInEvent = self.focusInEvent
И тогда это собственный focusInEvent()
:
def focusInEvent(self, event):
if self.pself.focusedLine:
self.pself.focusedLine.setStyleSheet("color: #666;")
self.pself.focusedLine.desc.hide()
self.pself.focusedLine.closebutton.hide()
self.setStyleSheet("color: #000;")
self.desc.show()
self.closebutton.show()
self.pself.focusedLine = self
1 ответ
Я подозреваю, что вы не звоните в оригинал focusInEvent()
когда вы переопределите это. Ваша функция должна выглядеть примерно так:
def focusInEvent(self,...):
QParent.focusInEvent(self,...)
# the rest of your code
где QParent
ближайший базовый класс для ваших виджетов
Либо так, либо обязательно позвоните focusInEvent()
на ваше QLineEdit
виджеты как часть вашей функции.
Учитывая комментарии, похоже, что вы динамически переназначаете focusInEvent
функция на insantiatations в ваш пользовательский виджет. Я бы либо создал производный класс для каждого используемого вами виджета, который просто переопределяет focusInEvent
как указано выше, или включите строку, например
type(self).focusInEvent(self,..)
в твоей функции.