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
我有两个QTableview小部件,第一个QTableview小部件有26行和4列,第四列只可编辑,第二个Qtableviw小部件有1行和26列,如果我在第四列的第一个QTableview中更改,背景颜色会改变,第二个QTableview的背景颜色也会改变。你知道吗
具体来说,第一个Qtableview小部件有26行和4列,第四个小部件仅可编辑,第二个Qtableview小部件有1行和26列,如果我在第一个Qtableview中填充单元格索引(10,3)中的任何tex,那么单元格颜色将发生变化,第二个Qtableview背景颜色中的相应的单元格索引(0,10)将发生变化。你知道吗
您必须检测第二个QTableView的对应项的变化,获取该项的行才能设置第一个QTableView的对应项的背景色。你知道吗
相关问题 更多 >
编程相关推荐