2013-08-20 1 views
0

Я пишу небольшую программу pyqt. Я хочу, чтобы главное окно реагировало на движение стрелки. Я добавил событие в мой класс MainGui, keyPressEvent, который обрабатывает это. Мероприятие отлично работает, пока я не нажимаю определенные кнопки, такие как Key_Up или Key_Down направляются только на мой (только на данный момент) QComboBox, а не на мой mainGui. Я попытался дать фокус mainGui после каждого paintEvent, но затем мне нужно дважды щелкнуть по кнопкам/comboBox.combobox steal keyboard из главного окна в pyqt

Затем я попытался использовать MousePressEvent, чтобы проверить, находится ли какой-то элемент под мышью. Это отлично работает с comboBox, но не с кнопкой.

Итак, как я могу направить ключевые события на mainGui или дать фокус QButtons?

ответ

0

Я использовал eventFilter, чтобы определить, когда мышь ввести QPushButton и дать ему фокус:

def eventFilter(self,source,event): 
    if event.type() == QtCore.QEvent.HoverMove: 
    if self.execButton.underMouse(): 
     self.execButton.setFocus() 
     self.keepFocus=False 
    else : 
     self.keepFocus=True 

keepFocus это флаг I инициализируется в __init__ функции класса. Я добавил эту часть в paintEvent функции

if self.keepFocus: 
     self.setFocus() 
    else: 
     self.keepFocus = True 

Теперь я держать в центре внимания на MainGui и я только дать ему кнопку, когда мышь дрейф над ним. Если я сделаю еще одно действие (например, нажатие кнопки мыши или клавиши клавиатуры), фокус возвращается к MainGui. Это приведет к некоторому заполнению багги (например, мне нужно дважды нажать клавишу клавиатуры до первого ответа), но это работает.