Python 关注多个小部件

Python 关注多个小部件,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我有一个GUI,在主窗口中有几个小部件。更具体地说,我有一个QTableWidget和一个QTableView,其中包含可选行。如果我在第一个表中选择一行,然后在第二个表中选择另一行,我会在第一个表上失去焦点,因此所选行上没有蓝色背景 我目前的情况是: 或者这个: 我想要的是: 如何执行此操作?您需要将qtablewidget的itemSelectionChanged信号连接到一个插槽,在该插槽中,您可以选择其他小部件中的行 差不多 tblwidget.itemSelectionChang

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

我目前的情况是: 或者这个:

我想要的是:


如何执行此操作?

您需要将
qtablewidget
itemSelectionChanged
信号连接到一个插槽,在该插槽中,您可以选择其他小部件中的行

差不多

tblwidget.itemSelectionChanged.connect(handleSelection)
并在中定义一个名为
handleSelection

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

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

从PyQt5导入QtGui、QtWidgets
类ProxyStyle(QtWidgets.QProxyStyle):
def drawPrimitive(self、element、option、painter、widget=None):
如果元素==QtWidgets.QStyle.PE_PanelItemViewRow:
如果选择option.state&qtwidts.QStyle.state\u:
option.state |=QtWidgets.QStyle.state|激活
super().drawPrimitive(元素、选项、画师、小部件)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
tablewidget=qtwidts.QTableWidget(10,6)
model=QtGui.QStandardItemModel(10,6)
tableview=QtWidgets.QTableView()
tableview.setModel(模型)
对于表中的(
tablewidget,
tableview,
):
table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
table.setStyle(ProxyStyle(table.style()))
w=qtwidts.QWidget()
lay=qtwidts.QHBoxLayout(w)
lay.addWidget(tablewidget)
lay.addWidget(tableview)
w、 show()
sys.exit(app.exec_())
您还可以使用委托:

从PyQt5导入QtGui、QtWidgets
类委托(QtWidgets.QStyledItemDelegate):
def initStyleOption(self、option、index):
super().initStyleOption(选项,索引)
如果选择option.state&qtwidts.QStyle.state\u:
option.state |=QtWidgets.QStyle.state|激活
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
tablewidget=qtwidts.QTableWidget(10,6)
model=QtGui.QStandardItemModel(10,6)
tableview=QtWidgets.QTableView()
tableview.setModel(模型)
对于表中的(
tablewidget,
tableview,
):
table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
委托=委托(表)
表.setItemDelegate(委托)
w=qtwidts.QWidget()
lay=qtwidts.QHBoxLayout(w)
lay.addWidget(tablewidget)
lay.addWidget(tableview)
w、 show()
sys.exit(app.exec_())

也许我不够清楚。。。这两张桌子是独立的。如果我选择一个表中的一行,我不希望发生特殊的事情,除非不移除另一个表上的焦点(我希望在所选行上保留蓝色黑地)。