2017-12-26 12 views
1

Im folgenden Code springt der rote Hintergrund bei jedem Drücken der Tabulatortaste vor und zurück. Wenn Sie weitere Tabs (etwa acht für mich) hinzufügen, werden die Tab-Roll-Schaltflächen angezeigt, und es wird eine Situation verursacht, in der ein doppeltes Drücken der Tabulatortaste erforderlich ist.Wie kann verhindert werden, dass die QTabWidget-Bildlaufschaltflächen den Fokus erhalten?

Gibt es eine Möglichkeit zu verhindern, dass die Bildlaufschaltflächen den Tastaturfokus erhalten?

# Testing with python 3.6.3 pip installed pyqt5 5.9.2 in virtualenv on Ubuntu 
import sys 
from PyQt5 import QtCore, QtWidgets 


class Widget(QtWidgets.QWidget): 
    def __init__(self, parent=None): 
     QtWidgets.QWidget.__init__(self, parent) 

     layout = QtWidgets.QVBoxLayout() 
     self.setLayout(layout) 

     self.tabs_left = QtWidgets.QTabWidget() 
     self.tabs_left.setFocusPolicy(QtCore.Qt.NoFocus) 
     self._add_tab(self.tabs_left) 
     self.tabs_right = QtWidgets.QTabWidget() 
     self.tabs_right.setFocusPolicy(QtCore.Qt.NoFocus) 
     self._add_tab(self.tabs_right) 

     layout.addWidget(self.tabs_left) 
     layout.addWidget(self.tabs_right) 

     self.add_button = QtWidgets.QPushButton('Add Tab') 
     self.add_button.setFocusPolicy(QtCore.Qt.NoFocus) 
     layout.addWidget(self.add_button) 

     self.add_button.clicked.connect(self._add_tab_left) 

    def _add_tab(self, tabs): 
     edit = QtWidgets.QTextEdit() 
     edit.setReadOnly(True) 
     edit.setStyleSheet("QTextEdit:focus { background-color: red;}") 
     tabs.addTab(edit, '{}'.format(tabs.count())) 

    def _add_tab_left(self): 
     self._add_tab(self.tabs_left) 


if __name__ == "__main__": 
    app = QtWidgets.QApplication(sys.argv) 
    widget = Widget() 
    widget.show() 
    sys.exit(app.exec_()) 

Antwort

1

Sie können, indem der Fokus-Politik auf die Registerkarte Werkzeug-Tasten um diese Arbeit:

class Widget(QtWidgets.QWidget): 
    ... 
    def _add_tab(self, tabs): 
     ... 
     for child in tabs.findChildren(QtWidgets.QToolButton): 
      child.setFocusPolicy(QtCore.Qt.NoFocus) 
Verwandte Themen