rscder-pub/rscder/gui/result.py
2022-05-10 14:28:48 +08:00

73 lines
2.9 KiB
Python

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt,QModelIndex, pyqtSignal
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import (QTableWidgetItem, QTableWidget, QAbstractItemView, QHeaderView, QStyleFactory)
from rscder.utils.project import PairLayer, ResultLayer
class ResultTable(QtWidgets.QWidget):
on_item_click = pyqtSignal(dict)
on_item_changed = pyqtSignal(dict)
def __init__(self, parent=None):
super(ResultTable, self).__init__(parent)
# self.tableview = QTableView(self)
self.tablewidget = QTableWidget(self)
self.tablewidget.setColumnCount(5)
self.tablewidget.setRowCount(0)
self.tablewidget.setHorizontalHeaderLabels(['序号', 'X', 'Y', '概率', '变化'])
self.tablewidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tablewidget.cellDoubleClicked.connect(self.onDoubleClicked)
self.tablewidget.cellClicked.connect(self.onClicked)
self.tablewidget.cellChanged.connect(self.onChanged)
# self.tablewidget.setModel(self.tableview)
# self.tableview
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.tablewidget)
self.setLayout(layout)
def clear(self):
pass
def onChanged(self, row, col):
if col == 4:
item_idx = row
item_status = self.tablewidget.item(row, col).checkState() == Qt.Checked
self.on_item_changed.emit({'idx':item_idx, 'status':item_status})
def onClicked(self, row, col):
if col == 4:
self.tablewidget.item(row, col).setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
def onDoubleClicked(self, row, col):
x = self.tablewidget.item(row, 1).text()
y = self.tablewidget.item(row, 2).text()
self.on_item_click.emit({'x':x, 'y':y})
def set_data(self, data:ResultLayer):
self.tablewidget.setRowCount(len(data.data))
for i, d in enumerate(data.data):
self.tablewidget.setItem(i, 0, QTableWidgetItem(str(i+1)))
self.tablewidget.setItem(i, 1, QTableWidgetItem(str(d[0]))) # X
self.tablewidget.setItem(i, 2, QTableWidgetItem(str(d[1]))) # Y
self.tablewidget.setItem(i, 3, QTableWidgetItem(str(d[2]))) # 概率
status_item = QTableWidgetItem('变化')
if d[3] == 0:
status_item.setBackground(Qt.green)
status_item.setCheckState(Qt.Unchecked)
elif d[3] == 1:
status_item.setBackground(Qt.yellow)
status_item.setCheckState(Qt.Checked)
self.tablewidget.setItem(i, 4, status_item) # 变化
self.tablewidget.resizeColumnsToContents()
self.tablewidget.resizeRowsToContents()
self.tablewidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tablewidget.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)