Python 如何连接两个QTableview小部件?
我有两个QTableview小部件,第一个QTableview小部件有26行和4列,第四列仅可编辑,第二个Qtableviw小部件有1行和26列,如果我在第四列的第一个QTableview中更改,背景颜色将更改,第二个QTableview中的背景颜色将更改Python 如何连接两个QTableview小部件?,python,pyqt,pyqt5,qtableview,Python,Pyqt,Pyqt5,Qtableview,我有两个QTableview小部件,第一个QTableview小部件有26行和4列,第四列仅可编辑,第二个Qtableviw小部件有1行和26列,如果我在第四列的第一个QTableview中更改,背景颜色将更改,第二个QTableview中的背景颜色将更改 具体来说,第一个Qtableview小部件有26行和4列,第四个小部件仅可编辑,第二个Qtableview小部件有1行和26列,如果我在第一个Qtableview中填充单元格索引(10,3)中的任何tex,则单元格颜色将发生变化,并且相应的单
具体来说,第一个Qtableview小部件有26行和4列,第四个小部件仅可编辑,第二个Qtableview小部件有1行和26列,如果我在第一个Qtableview中填充单元格索引(10,3)中的任何tex,则单元格颜色将发生变化,并且相应的单元格索引(0,10)将发生变化在第二个QTableview中,背景颜色将发生变化。您必须检测第二个QTableview中相应项目的变化,获取该项目的行,以便能够设置第一个QTableview中相应项目的背景颜色 导入系统 从PyQt5导入QtCore作为qtc 从PyQt5将QtWidgets作为qtw导入 从PyQt5将QtGui作为qtg导入 类QTableWidgetDisabledItem(qtw.QItemDelegate): def createEditor(自身、父项、选项、索引): 返回 类主窗口(qtw.QMainWindow): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuu(父级) self.createUI() def createUI(自): self.Statusbar=qtw.QTableView( editTriggers=qtw.QAbstractItemView.NoEditTriggers ) self.statusbar_model=qtg.QStandardItemModel(self) self.Statusbar.setModel(self.Statusbar\u模型) 自我状态栏设置固定高度(70) self.tableWidget=qtw.QTableView( selectionBehavior=qtw.QAbstractItemView.SelectRows ) self.tableWidget.setGeometry(0,0,100100) self.model=qtg.QStandardItemModel(self) self.model.setHorizontalHeaderLabels([“ID”、“Category”、“Time”、“Comment”]) self.tableWidget.setModel(self.model) 对于范围(3)中的i: delegate=QTableWidgetDisabledItem(self.tableWidget) self.tableWidget.setItemDelegateForColumn(i,委托) self.model.itemChanged.connect(self.on\u itemChanged) 自我调整大小(qtc.QSize(1200800)) base_widget=qtw.QWidget() self.setCentralWidget(基本窗口小部件) notebook=qtw.QVBoxLayout() 记事本.设置间距(10) notebook.setContentsMargins(0,0,0,0) notebook.addWidget(self.Statusbar,alignment=qtc.Qt.AlignTop) lay=qtw.QHBoxLayout(基本窗口小部件) lay.addLayout(笔记本电脑) self.file_list=qtw.QVBoxLayout() self.file\u list.addWidget(self.tableWidget) lay.addLayout(self.file\u列表) self.populate() def填充(自我): #模拟填充 self.model.setRowCount(26) self.statusbar\u model.setRowCount(1) self.statusbar\u model.setColumnCount(self.model.rowCount()) @qtc.pyqtlot(“QStandardItem*”) _项目上的def已更改(自身,项目): 如果item.column()==3: it=self.statusbar\u model.item(0,item.row()) 如果没有: it=qtg.QStandardItem() self.statusbar_model.setItem(0,item.row(),it) 画笔=( qtg.QBrush(qtg.QColor(“红色”))if item.text().strip()else qtg.QBrush() ) it.背景(刷子) 如果名称=“\uuuuu main\uuuuuuuu”: app=qtw.QApplication(sys.argv) mw=主窗口() mw.show() sys.exit(app.exec_())
提供一个@eyllanesc,请查找代码说明Above@eyllanesc对于同样的问题,如果我想从CSV文件中检索数据并设置为第一个QTableview窗口小部件,那么我应该怎么做?如果我导入CSV文件,然后在“填充”中将此CSV设置为模型,那么我该怎么做??
import sys
from PyQt5 import QtCore as qtc
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
import os.path
import pandas as pd
class a(qtw.QStyledItemDelegate):
def createEditor(self, parent, option, index):
line_edit = qtw.QLineEdit(parent)
line_edit.setMaxLength(3)
return line_edit
class ColorDelegate(qtw.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
if option.text.strip(): # condition
option.backgroundBrush = qtg.QColor("red")
class MainWindow(qtw.QMainWindow):
def __init__(self):
super().__init__()
##Main framwork
self.createUI()
def createUI(self):
self.resize(qtc.QSize(1200, 800))
base_widget = qtw.QWidget()
base_widget.setLayout(qtw.QHBoxLayout())
notebook = qtw.QVBoxLayout()
base_widget.layout().addLayout(notebook)
self.file_list = qtw.QVBoxLayout()
notebook.setSpacing(10)
notebook.setContentsMargins(0, 0, 0, 0)
base_widget.layout().addLayout(self.file_list)
spacerItem = qtw.QSpacerItem(20, 245, qtw.QSizePolicy.Minimum, qtw.QSizePolicy.Expanding)
base_widget.layout().addItem(spacerItem)
self.setCentralWidget(base_widget)
# self.Detailbar = qtw.QHBoxLayout()
self.Statusbar = qtw.QTableView()
self.stausbar_model = qtg.QStandardItemModel(self)
self.Statusbar.setModel(self.stausbar_model)
self.Statusbar.setFixedHeight(70)
self.Statusbar.setEditTriggers(qtw.QAbstractItemView.NoEditTriggers)
notebook.addWidget(self.Statusbar)
# CREATE THE TABLE
self.tableWidget = qtw.QTableView(self) # SELECTING THE VIEW
self.tableWidget.setGeometry(0, 0, 100, 100)
self.model = qtg.QStandardItemModel(self)
self.model.setHorizontalHeaderLabels(['ID', 'Category', 'Time','Comment']) # SELECTING THE MODEL - FRAMEWORK THAT HANDLES QUERIES AND EDITS
self.tableWidget.setModel(self.model) # SETTING THE MODEL
self.tableWidget.setSelectionBehavior(qtw.QAbstractItemView.SelectRows)
self.Size = QTableWidgetDisabledItem(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(0, self.Size)
self.tableWidget.setItemDelegateForColumn(1, self.Size)
self.tableWidget.setItemDelegateForColumn(2, self.Size)
self.tableWidget.doubleClicked.connect(self.on_click)
delegate = ColorDelegate(self.tableWidget)
# self.tableWidget.setItemDelegateForColumn(3, delegate)
self.tableWidget.setItemDelegate(delegate)
self.file_list.addWidget(self.tableWidget)
def populate(self):
# GENERATE A 4x10 GRID OF RANDOM NUMBERS.
# VALUES WILL CONTAIN A LIST OF INT.
# MODEL ONLY ACCEPTS STRINGS - MUST CONVERT.
csv_fname = os.path.splitext(self.fname)[0]
edited_csv_fname = csv_fname + ".csv"
self.data = pd.read_csv(edited_csv_fname)
values = []
for i in range(len(self.data.index)):
sub_values = []
for j in range(len(self.data.columns)):
value = self.data.iloc[i, j]
sub_values.append(value)
values.append(sub_values)
for value in values:
row = []
for item in value:
cell = qtg.QStandardItem(str(item))
row.append(cell)
self.model.appendRow(row)
qd = []
for k in range(len(self.data.index)):
qd.append(qtg.QStandardItem(str('')))
self.stausbar_model.appendRow(qd)
def flags(self, index):
flags = super(self.__class__, self).flags(index)
flags |= qtc.Qt.ItemIsEditable
flags |= qtc.Qt.ItemIsSelectable
flags |= qtc.Qt.ItemIsEnabled
flags |= qtc.Qt.ItemIsDragEnabled
flags |= qtc.Qt.ItemIsDropEnabled
return flags
class QTableWidgetDisabledItem(qtw.QItemDelegate):
def __init__(self, parent):
qtw.QItemDelegate.__init__(self, parent)
def createEditor(self, parent, option, index):
item = qtw.QLineEdit(parent)
item.setReadOnly(True)
#item.setEnabled(False)
return item
def setEditorData(self, editor, index):
editor.blockSignals(True)
editor.setText(index.model().data(index))
editor.blockSignals(False)
def setModelData(self, editor, model, index):
model.setData(index, editor.text())
if __name__ == '__main__':
app = qtw.QApplication(sys.argv) #it's required to save a referance to MainWindow
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
#if it goes out of scope ,it will be destroyed