2017-10-07 58 views
1

QWidgetには、QFrameとラベルで囲まれた2つのリストボックスがあり、QWidgetに並べて配置されたQTウィジェットがあります。私はタブキーを使ってそれらの間を移動することができますが、左右の矢印キーを使って移動したいと思います。これを行う最善の方法は何ですか?PyQT5矢印キーを使用してリストボックス間でフォーカスを移動

マイQWidgetのとListWidgetsあなたがリストウィジェット上でイベントフィルタをインストールしてフォーカスを移動するために彼らの親ウィジェットのfocusNextPrevChild方法を使用することができ、次の

class MainWindow(QWidget): 

    def __init__(self): 
     super().__init__() 

     self.init_ui() 

    def init_ui(self): 
     hbox = QHBoxLayout() 
     hbox.addWidget(Left()) 
     hbox.addWidget(Right()) 
     self.setLayout(hbox) 
     self.show() 


class Left(QFrame): 

    def __init__(self): 
     super().__init__() 

     self.initUI() 


    def initUI(self): 
     header = QLabel() 
     header.setText('Left') 

     l = QListWidget() 
     items = ['Item %s' % (i + 1) for i in range(10)] 
     l.addItems(items) 

     vbox = QVBoxLayout() 
     vbox.addWidget(header) 
     vbox.addWidget(l) 

     self.setLayout(vbox) 



class Right(QFrame): 

    def __init__(self): 
     super().__init__() 

     self.initUI() 

    def initUI(self): 
     header = QLabel() 
     header.setText('Right') 

     l = QListWidget() 
     items = ['Item %s' % (i + 1) for i in range(10)] 
     l.addItems(items) 

     vbox = QVBoxLayout() 
     vbox.addWidget(header) 
     vbox.addWidget(l) 

     self.setLayout(vbox) 


def main(): 
    app = QApplication(sys.argv) 
    main_window = MainWindow() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

答えて

0

次のようになります。

class MainWindow(QWidget): 
    ... 
    def init_ui(self): 
     hbox = QHBoxLayout() 
     self.left = Left() 
     self.left.installEventFilter(self) 
     hbox.addWidget(self.left) 
     self.right = Right() 
     self.right.installEventFilter(self) 
     hbox.addWidget(self.right) 
     self.setLayout(hbox) 
     self.show() 

    def eventFilter(self, source, event): 
     if (event.type() == QEvent.KeyPress and 
      (event.key() == Qt.Key_Left or event.key() == Qt.Key_Right) and 
      event.modifiers() == Qt.NoModifier and 
      (source is self.left or source is self.right)): 
      self.focusNextPrevChild(event.key() == Qt.Key_Right) 
      return True 
     return super(MainWindow, self).eventFilter(source, event) 
関連する問題