专注于多个小部件

问题描述 投票:0回答:2

我在主窗口中有一个带有多个小部件的GUI。更具体地说,我有一个QTableWidget和一个QTableView,其中包含可选行。如果我在第一张表中选择一行,然后在第二张表中选择另一行,则我将焦点放到第一张表上,因此所选行上没有蓝色背景。

我现在所拥有的是这个:

enter image description here或这个:enter image description here

我想要的是这个:

enter image description here

我该怎么做?

python python-3.x pyqt pyqt5
2个回答
0
投票

您需要将itemSelectionChangedqtablewidget信号连接到一个插槽,在该插槽中您可以选择另一个小部件中的行。

类似

tblwidget.itemSelectionChanged.connect(handleSelection)

并在其中定义一个名为handleSelection的插槽

def handleSelection(self):
    .... logic for selecting the current row
    .. of the other widget

0
投票

您必须使用QProxyStyle来确定视图是否聚焦时所选项目的绘制是相同的。

from PyQt5 import QtGui, QtWidgets


class ProxyStyle(QtWidgets.QProxyStyle):
    def drawPrimitive(self, element, option, painter, widget=None):
        if element == QtWidgets.QStyle.PE_PanelItemViewRow:
            if option.state & QtWidgets.QStyle.State_Selected:
                option.state |= QtWidgets.QStyle.State_Active
        super().drawPrimitive(element, option, painter, widget)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    tablewidget = QtWidgets.QTableWidget(10, 6)

    model = QtGui.QStandardItemModel(10, 6)
    tableview = QtWidgets.QTableView()
    tableview.setModel(model)

    for table in (
        tablewidget,
        tableview,
    ):
        table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        table.setStyle(ProxyStyle(table.style()))

    w = QtWidgets.QWidget()
    lay = QtWidgets.QHBoxLayout(w)
    lay.addWidget(tablewidget)
    lay.addWidget(tableview)
    w.show()

    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.