2017-09-25 2 views
0

Ich möchte wissen, wie man von einem Tabellen-Widget zum nächsten Widget bewegt, wenn ich die Tab-Taste in PyQt drücken.Wie man von einem QTableWidget zum nächsten Widget mit der Tab-Taste bewegt

Die aktuelle Widget-Sequenz besteht aus Zeile-Bearbeiten> Kombinationsfeld> Tabellen-Widget> Schaltfläche. Wenn Sie in der Zeilenbearbeitung am Anfang die Tabulatortaste drücken, wird das Kombinationsfeld> Tabellenwidget in Reihenfolge verschoben. Im Tabellen-Widget, das sich wiederholt zum Ende bewegt, bewegt es sich jedoch wieder in die 0,0 Zeile und Spalte des Tabellen-Widgets, nicht zum nächsten Widget (der Schaltfläche).

Wie behebe ich das?

+0

Wenn meine Antwort Ihres Problem gelöst, bitte markieren als angenommen (das heißt auf dem tick-Symbol klicken). Wenn nicht, erkläre bitte, was sonst noch benötigt wird. – ekhumoro

Antwort

0

Es gibt zwei Möglichkeiten, dies zu beheben.

Der erste und einfachste Weg besteht darin, setTabKeyNavigation zu verwenden, um das Verschieben zwischen Zellen mithilfe der Tab-Taste vollständig zu deaktivieren. Die Pfeiltasten müssen dann verwendet werden, um zwischen Zellen in der Tabelle zu navigieren.

Der zweite Weg ist, um die Tastendruckereignis Gabe für die Tabelle zu ändern, so dass Tab in der letzten Zelle und UmschaltTab in der ersten Zelle den Fokus zu dem nächsten/vorherigen Widget bewegt.

Der Demo-Skript zeigt unter diesen beiden Ansätzen:

import sys 
from PyQt5 import QtCore, QtWidgets 

class Window(QtWidgets.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.edit = QtWidgets.QLineEdit() 
     self.combo = QtWidgets.QComboBox() 
     self.table = QtWidgets.QTableWidget(3, 3) 
     self.button = QtWidgets.QPushButton('Disable Table Tabbing', self) 
     self.button.clicked.connect(self.handleButton) 
     layout = QtWidgets.QGridLayout(self) 
     layout.addWidget(self.edit, 0, 0) 
     layout.addWidget(self.combo, 0, 1) 
     layout.addWidget(self.table, 1, 0, 1, 2) 
     layout.addWidget(self.button, 2, 0, 1, 2) 
     self.table.installEventFilter(self) 
     self.edit.setFocus() 

    def handleButton(self): 
     if self.table.tabKeyNavigation(): 
      self.button.setText('Enable Table Tabbing') 
      self.table.setTabKeyNavigation(False) 
     else: 
      self.button.setText('Disable Table Tabbing') 
      self.table.setTabKeyNavigation(True) 

    def eventFilter(self, source, event): 
     if (event.type() == QtCore.QEvent.KeyPress and 
      source is self.table and source.isEnabled() and 
      source.tabKeyNavigation()): 
      index = self.table.currentIndex() 
      if event.key() == QtCore.Qt.Key_Backtab: 
       if index.row() == index.column() == 0: 
        QtWidgets.QAbstractScrollArea.focusNextPrevChild(
         self.table, False) 
        return True 
      elif event.key() == QtCore.Qt.Key_Tab: 
       model = self.table.model() 
       if (index.row() == model.rowCount() - 1 and 
        index.column() == model.columnCount() - 1): 
        QtWidgets.QAbstractScrollArea.focusNextPrevChild(
         self.table, True) 
        return True 
     return super(Window, self).eventFilter(source, event) 

if __name__ == '__main__': 

    app = QtWidgets.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(600, 100, 400, 250) 
    window.show() 
    sys.exit(app.exec_()) 
Verwandte Themen