Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何连接两个QTableview小部件?_Python_Pyqt_Pyqt5_Qtableview - Fatal编程技术网

Python 如何连接两个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小部件,第一个QTableview小部件有26行和4列,第四列仅可编辑,第二个Qtableviw小部件有1行和26列,如果我在第四列的第一个QTableview中更改,背景颜色将更改,第二个QTableview中的背景颜色将更改


具体来说,第一个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