python - 如何防止 QTabWidget 滚动按钮获得焦点?

标签 python pyqt focus pyqt5 qtabwidget

在下面的代码中,每次按 Tab 键时红色背景都会来回跳动。添加更多选项卡(对我来说大约八个)会导致选项卡栏滚动按钮出现,并导致需要按两次选项卡键的情况。

有什么办法可以防止滚动按钮获得键盘焦点吗?

# 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_())

最佳答案

您可以通过在选项卡工具按钮上设置焦点策略来解决此问题:

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

关于python - 如何防止 QTabWidget 滚动按钮获得焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982535/

相关文章:

python - Python的 "=="到底是做什么的

python - 需要在python中找到print或者printf的源码

python - 在 Qt 的槽中使用任何 'return' 语句会产生什么影响

javascript - 网站可以将焦点传递给浏览器的 url 字段吗?

swift - 如何处理 tvOS Remote 中的菜单按钮操作

javascript - 如何滚动到 jQuery 中的元素?

python ast vs json for str to dict translation

python - 如何使用 GDAL 将操纵的栅格值写入 ASCII 网格?

drag-and-drop - 如何在 KSnapshot 中的 QLabel 上选择带有 QRubberBand 的区域?

python - 打开cx_freeze构建的exe文件时出错