Aug-17-2020, 09:55 AM
Here is the code, but I cannot get mode 1 and 2 to execute.
What I want is, mode 1 and mode 2 are distinct, mode1 settings will not appear in mode2 when toggled.
Thanks.
What I want is, mode 1 and mode 2 are distinct, mode1 settings will not appear in mode2 when toggled.
Thanks.
import sys from PySide2.QtWidgets import QApplication, QTableWidget, QStyledItemDelegate, QWidget, QHeaderView, QAbstractItemView, \ QPushButton, QTableWidgetItem, QVBoxLayout, QHBoxLayout, QRadioButton from PySide2.QtCore import Qt class ReadOnly(QStyledItemDelegate): def createEditor(self, parent, option, index): return class TableWidget(QTableWidget): def __init__(self): super().__init__(1, 5) self.setHorizontalHeaderLabels(list('ABCDE')) self.verticalHeader().setDefaultSectionSize(50) self.horizontalHeader().setDefaultSectionSize(250) self.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed) def _addRow(self): rowCount = self.rowCount() self.insertRow(rowCount) def _removeRow(self): if self.rowCount() > 0: self.removeRow(self.rowCount()-1) def _copyRow(self): self.insertRow(self.rowCount()) rowCount = self.rowCount() columnCount = self.columnCount() for j in range(columnCount): if not self.item(rowCount-2, j) is None: self.setItem(rowCount-1, j, QTableWidgetItem(self.item(rowCount-2, j).text())) class AppDemo(QWidget): def __init__(self): super().__init__() self.resize(1600, 600) mainLayout = QHBoxLayout() table = TableWidget() mainLayout.addWidget(table) buttonLayout = QVBoxLayout() button_new = QPushButton("New") button_new.clicked.connect(table._addRow) buttonLayout.addWidget(button_new) button_copy = QPushButton('Copy') button_copy.clicked.connect(table._copyRow) buttonLayout.addWidget(button_copy) button_remove = QPushButton('Remove') button_remove.clicked.connect(table._removeRow) buttonLayout.addWidget(button_remove) radioLayout = QVBoxLayout() radioA = QRadioButton('A') radioA.toggled.connect(self.mode1) radioLayout.addWidget(radioA) radioB = QRadioButton('B') radioB.toggled.connect(self.mode2) radioLayout.addWidget(radioB) mainLayout.addLayout(buttonLayout) mainLayout.addLayout(radioLayout) self.setLayout(mainLayout) def mode1(self): delegate = ReadOnly(self) table = TableWidget() table.setItemDelegateForColumn(0, delegate) table.setItemDelegateForRow(0, delegate) def mode2(self): delegate = ReadOnly(self) table = TableWidget() table.setItemDelegateForColumn(2, delegate) table.setItemDelegateForRow(2, delegate) app = QApplication(sys.argv) app.setStyleSheet('QPushButton{font-size: 20px; width: 200px; height: 50px}') demo = AppDemo() demo.show() sys.exit(app.exec_())