Fechar

quarta-feira, 23 de março de 2011


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ção

Agora 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:

JFB on 17 de agosto de 2020 às 10:52 disse...

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

Mais Populares

Seguidores

Є & V. Copyright 2011 Evaldo Avelar Marques - sprintrade network