gpt4 book ai didi

python - 专注于多个小部件

转载 作者:行者123 更新时间:2023-12-01 00:16:23 24 4
gpt4 key购买 nike

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

我目前所拥有的是:

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

我想要的是这样的:

enter image description here

我该怎么做?

最佳答案

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

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

您还可以使用委托(delegate):

from PyQt5 import QtGui, QtWidgets


class Delegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if option.state & QtWidgets.QStyle.State_Selected:
option.state |= QtWidgets.QStyle.State_Active


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)
delegate = Delegate(table)
table.setItemDelegate(delegate)

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

sys.exit(app.exec_())

关于python - 专注于多个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com