如何将项目从QTreeWidget移动到QListWidget?

2024-09-07 12:38:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,我可以从中来回移动项目,如下所示,当您在选择参数后单击“确定”时,它们将被添加到QTableWidget中

The two list

但我的问题是,我希望第一个列表是一个QTreeWidget,这样就有了参数的子类别,但我不知道该怎么做

这是我为具有两个列表和按钮的类编写的代码:

PARAMETERS = [
    "time",
    "status",
    "shutdown active",
    "shutdown active",
    "suction pressure",
    "suction temperature",
    "suction superheat",
    "discharge pressure",
    "lubrication pressure",
    "diff pressure",
    "oil temperature",
    "brine temperature",
    "internal pressure",
    "oil pump pressure",
    "oil balance pressure",
    "motor current",
    "motor revs",
    "motor power",
    "capacity",
    "yield",
    "cap. slide position",
    "vi slide position",
]


class ParameterSelection(QWidget):
    def __init__(self, startLogFrame):
        super().__init__()
        self.tableWidget = startLogFrame.getTableWidget()
        self._initUI()

    def _initUI(self):
        self.setWindowTitle("Parameter selection")
        self.setWindowIcon(QIcon(ICONPATHJOHNSON))
        self._setupLayout()

    def _setupLayout(self):
        _lay = QHBoxLayout(self)
        self._mInput = QListWidget()
        self._mOutput = QListWidget()

        self._buttonToSelected = QPushButton(">>")
        self._buttonMoveToAvailable = QPushButton(">")
        self._buttonMoveToSelected = QPushButton("<")
        self._buttonToAvailable = QPushButton("<<")

        _vlay = QVBoxLayout()
        _vlay.addStretch()
        _vlay.addWidget(self._buttonToSelected)
        _vlay.addWidget(self._buttonMoveToAvailable)
        _vlay.addWidget(self._buttonMoveToSelected)
        _vlay.addWidget(self._buttonToAvailable)
        _vlay.addStretch()

        _lay.addWidget(self._mInput)
        _lay.addLayout(_vlay)
        _lay.addWidget(self._mOutput)

        self._buttonToSelected.clicked.connect(self._buttonToSelectedClicked)
        self._buttonMoveToAvailable.clicked.connect(self._buttonMoveToAvailableClicked)
        self._buttonMoveToSelected.clicked.connect(self._buttonMoveToSelectedClicked)
        self._buttonToAvailable.clicked.connect(self._buttonToAvailableClicked)

        for i, item in enumerate(PARAMETERS):
            item = QListWidgetItem(PARAMETERS[i])
            self._mInput.addItem(item)

        self._selectedButton = QPushButton("OK")
        self._selectedButton.clicked.connect(self.onSelected)

        _hlay = QHBoxLayout()
        _hlay.addWidget(self._selectedButton)
        _lay.addLayout(_hlay)

    def _buttonMoveToAvailableClicked(self):
        self._mOutput.addItem(self._mInput.takeItem(self._mInput.currentRow()))

    def _buttonMoveToSelectedClicked(self):
        self._mInput.addItem(self._mOutput.takeItem(self._mOutput.currentRow()))

    def _buttonToSelectedClicked(self):
        while self._mInput.count() > 0:
            self._mOutput.addItem(self._mInput.takeItem(0))

    def _buttonToAvailableClicked(self):
        while self._mOutput.count() > 0:
            self._mInput.addItem(self._mOutput.takeItem(0))

    def getSelectedElements(self) -> list:
        selected = []

        for i in range(self._mOutput.count()):
            _it = self._mOutput.item(i)
            selected.append(_it.text())

        return selected

    def onSelected(self):
        self.tableWidget.setRowCount(len(self.getSelectedElements()))

        for (i, element) in enumerate(self.getSelectedElements()):
            self.tableWidget.setItem(i, 0, QTableWidgetItem(element))

        self.close()