Remove of reset delegate - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: Remove of reset delegate (/thread-29048.html) |
Remove of reset delegate - GMCobraz - Aug-15-2020 Dear all, May I know is there anyway to reset to remove Qstyleditemdelegate? For example, I switched from radio button A to B. The delegate set on radio A brought over to B, which I don't want. I wish to remove delegate that set before and apply new delegate in B. Thank you very much. RE: Remove of reset delegate - deanhystad - Aug-16-2020 I have no idea what you ae asking. I think some context is required. Please provide some code that shows how you are using the delegate. RE: Remove of reset delegate - GMCobraz - Aug-17-2020 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_()) RE: Remove of reset delegate - deanhystad - Aug-17-2020 Have you tried setting the delegate to None? RE: Remove of reset delegate - GMCobraz - Aug-17-2020 def mode2(self): delegate = ReadOnly(self) table = TableWidget() table.setItemDelegateForColumn(0, None) table.setItemDelegateForRow(0, None) table.setItemDelegateForColumn(2, delegate) table.setItemDelegateForRow(2, delegate)Like this? RE: Remove of reset delegate - deanhystad - Aug-17-2020 Have you tried that? RE: Remove of reset delegate - GMCobraz - Aug-19-2020 Yes, it works when I set delegate to None. Thanks alot. |