双击第二个QTablview中的任何列单元格,然后它应该双击第二行中的第一个QTablview我应该如何执行此操作
例如:
生成了两个QTableview小部件,第一个QTableview小部件来自导入CSV文件,它有26行和4列,第4列仅可编辑,第二个QTableview小部件相对于第一个QTableWidgets自动生成,第一个QTableview小部件有1行和26列
如果在第二个QTableview中双击单元格索引(0,10),那么它将在第一个QTableview中双击行索引(10,0),那么如何添加此操作
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 QTableWidgetDisabledItem(qtw.QItemDelegate):
def createEditor(self, parent, option, index):
return
class MainWindow(qtw.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
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)
self.setCentralWidget(base_widget)
# self.Detailbar = qtw.QHBoxLayout()
self.Statusbar = qtw.QTableView()
self.Statusbar.setEditTriggers(qtw.QAbstractItemView.NoEditTriggers)
self.stausbar_model = qtg.QStandardItemModel(self)
self.Statusbar.setModel(self.stausbar_model)
self.Statusbar.setFixedHeight(70)
notebook.addWidget(self.Statusbar)
# CREATE THE TABLE
self.tableWidget = qtw.QTableView() # SELECTING THE VIEW
self.tableWidget.setSelectionBehavior(qtw.QAbstractItemView.SelectRows)
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
for i in range(3):
delegate = QTableWidgetDisabledItem(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(i, delegate)
self.model.itemChanged.connect(self.on_itemChanged)
self.file_list.addWidget(self.tableWidget)
#Actions Code
open1 = qtw.QAction("&Open", self)
open1.triggered.connect(self.OpenFile)
exit = qtw.QAction("&Exit", self)
exit.triggered.connect(sys.exit)
menubar = self.menuBar()
filemenu = menubar.addMenu("&File")
filemenu.addAction(open1)
filemenu.addSeparator()
filemenu.addAction(exit)
def populate(self):
edited_csv_fname = self.fname # Import CSV Files
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)
# print(self.model.rowCount())
# self.statusbar_model.setRowCount(1)
# self.statusbar_model.setColumnCount(len(self.data.index))
qd = []
for k in range(len(self.data.index)):
qd.append(None)
# qd.append(qtg.QStandardItem(None))
self.stausbar_model.appendRow(qd)
@qtc.pyqtSlot("QStandardItem*")
def on_itemChanged(self, item):
print(item.column())
if item.column() == 3:
it = self.statusbar_model.item(0, item.row())
print(item.column)
print(it)
if it is None:
it = qtg.QStandardItem()
self.statusbar_model.setItem(0, item.row(), it)
brush = (qtg.QBrush(qtg.QColor("red")) if item.text().strip() else qtg.QBrush())
it.setBackground(brush)
def OpenFile(self, filename=None):
if filename is None or filename is False:
print("Attempt to open up OpenFile")
filenameraw = qtw.QFileDialog.getOpenFileName(self, "Open File", os.path.expanduser('~'))
filename = filenameraw[0]
if not filename:
return
# create the csv file media
if sys.version < '3':
filename = unicode(filename)
print(filename)
type(filename)
self.fname = filename
self.populate()
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
目前没有回答
相关问题 更多 >
编程相关推荐