Python Forum
Remove of reset delegate
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Remove of reset delegate
#1
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.
Reply
#2
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.
Reply
#3
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_())
Reply
#4
Have you tried setting the delegate to None?
Reply
#5
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?
Reply
#6
Have you tried that?
Reply
#7
Yes, it works when I set delegate to None.

Thanks alot.
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020