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.
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_())