Enter como tab no PyQt4
Alguns usuários preferem usar o enter ao invez do tab para mudar o foco dos campos. Com o PyQt isso pode ser feito facilmente.
Como teste criei o seguinte form no QtDesigner. Eu usei um Qwidget como container, mas poderia ser um QMainWindow. Adicionei vários QLables e QLineEdits e 2 QpushButton:
No próprio QtDesigner, definir a ordem dos campos clicando no botão "Edit tab order" e depois clicando nos campos. Isso também pode ser feito diretamente no código python.
Não vou postar aqui a implementação da classe que irá o instanciar form, pois não é foco do artigo.
No init da classe que instancia o form, fazaemos um laço que percorre todos os widgetse verifica quais deles são do tipo QLineEdit (podia ser de qualquer outro tipo, como um QtCombobox, desde que tivesse o evento keyPressEvent ) e setamos o evento keyPressEvent para a função "keyPressCampos" que vamos implementar na nossa classe:
for x in self.children():#percorrendo todos os wdigets associados if (isinstance(x,QtGui.QLineEdit)): #verifica se o widget é QlineEdit x.keyPressEvent = self.keyPressCampos #associa o evento a funçãoAgora definimos a função keyPressCampos onde tratamos o evento, filtrando o tipo de tecla pressionada e jogando o foco para o próximo controle:
def keyPressCampos (self, event): key = event.key() # captura a tecla pressionada if (key == QtCore.Qt.Key_Enter) or (key == 16777220): # verifica o tipo de tecla self.focusNextChild() # muda o foco para o proximo widget event.accept() # aceita o evento else: event.accept() # Se a tecla não for enter, aceita o evento
Pronto! Com isso, ao terminar de digitar em algum QlineEdit e teclar enter o foco ira para o próximo widget no form:
1 comentários:
Bom dia, sou iniciante em programação e estou começando em python, estou tentando fazer um pequeno aplicativo, não consigo implementar seu exemplo, como eu defino o self.children no meu caso.
Postar um comentário