Как показать описание выбранного элемента в колонке? - PullRequest
1 голос
/ 09 марта 2020

Я незнаком с PyQt и QColumnView, как мне сделать так, чтобы мы получали «описание» всего, что выбрал пользователь, а не другую строку элементов, на которую я мог бы щелкнуть, чтобы расширить представление столбца?

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(423, 390)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.add_btn = QtWidgets.QPushButton(self.centralwidget)
        self.add_btn.setGeometry(QtCore.QRect(334, 345, 75, 23))
        self.add_btn.setObjectName("add_btn")
        self.auto_btn = QtWidgets.QPushButton(self.centralwidget)
        self.auto_btn.setGeometry(QtCore.QRect(245, 345, 81, 23))
        self.auto_btn.setObjectName("auto_btn")
        self.auto_num = QtWidgets.QLineEdit(self.centralwidget)
        self.auto_num.setGeometry(QtCore.QRect(141, 346, 99, 20))
        self.auto_num.setText("")
        self.auto_num.setClearButtonEnabled(False)
        self.auto_num.setObjectName("auto_num")
        self.columnView = QtWidgets.QColumnView(self.centralwidget)
        self.columnView.setGeometry(QtCore.QRect(10, 10, 399, 320))
        self.columnView.setObjectName("columnView")
        model = QtGui.QStandardItemModel()
        for i in 'abcd':
            group = QtGui.QStandardItem(i)
            model.appendRow(group)
        self.columnView.setModel(model)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.add_btn.setText(_translate("MainWindow", "Add Item"))
        self.auto_btn.setText(_translate("MainWindow", "Auto-populate"))

вот как я хочу, чтобы это выглядело

1 Ответ

0 голосов
/ 10 марта 2020

Мне не нужно использовать QColumnView, просто QListView + QTextEdit и связать роль для описания, поэтому при изменении выбора измените текст, показанный в QTextEdit.

from PyQt5 import QtCore, QtGui, QtWidgets


DescriptionRole = QtCore.Qt.UserRole + 1000


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.listview = QtWidgets.QListView()
        self.textedit = QtWidgets.QTextEdit(readOnly=True)

        self.model = QtGui.QStandardItemModel()
        self.listview.setModel(self.model)

        data = [
            ("a", "description of 'a'"),
            ("b", "description of 'b'"),
            ("c", "description of 'c'"),
            ("d", "description of 'd'"),
        ]

        for text, description in data:
            group = QtGui.QStandardItem(text)
            group.setData(description, DescriptionRole)
            self.model.appendRow(group)

        self.listview.selectionModel().selectionChanged.connect(
            self.on_selection_changed
        )

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        hlay = QtWidgets.QHBoxLayout(central_widget)
        hlay.addWidget(self.listview)
        hlay.addWidget(self.textedit)

    @QtCore.pyqtSlot()
    def on_selection_changed(self):
        indexes = self.listview.selectedIndexes()
        if indexes:
            index = indexes[0]
            description = index.data(DescriptionRole)
            self.textedit.setPlainText(description)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
...