Сценарий: мне нужно поместить поле со списком в четвертый столбец в qcolumnview, чтобы пользователь мог выбрать ВКЛ или ВЫКЛ.

Описание: в будущем он будет сохранен как файл XML, чтобы пользователь мог выбрать параметр и создать собственный файл XML. Может кто-нибудь сказать мне, как мне это сделать?

import sys

from PyQt4 import QtGui, QtCore


class xml_creator(QtGui.QMainWindow):
    def __init__(self):
        super(xml_creator, self).__init__()
        self.initUI()

    def initUI(self):

        column_view = QtGui.QColumnView(self)
        self.setCentralWidget(column_view)

        m_model = QtGui.QStandardItemModel()
        column_view.setModel(m_model)
        column_view.setAlternatingRowColors(True)

        self.test_variables = {}
        self.test_variables['OPTION_1'] = ['OFF', 'ON']
        self.test_variables['OPTION_2'] = ['OFF', 'ON']

        self.iq_xml = {}
        self.iq_xml['TEST_1'] = {}
        self.iq_xml['TEST_1']['Test_case_1'] = self.test_variables

        for x in self.iq_xml:

            if not self.iq_xml[x]:
                continue
            parent = QtGui.QStandardItem(x)
            parent.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable)

            for y in self.iq_xml[x]:
                if not self.iq_xml[x][y]:
                    continue
                child0 = QtGui.QStandardItem(y)
                child0.setFlags(QtCore.Qt.ItemIsEnabled)
                parent.appendRow(child0)


                for z in self.iq_xml[x][y]:
                    if not self.iq_xml[x][y][z]:
                        continue

                    grand_child = QtGui.QStandardItem(z)
                    grand_child.setFlags(QtCore.Qt.ItemIsEnabled)
                    child0.appendRow(grand_child)

                    value = self.iq_xml[x][y][z]
                    grand_grand_child = QtGui.QStandardItem(str(value))
                    grand_grand_child.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable)
                    grand_child.appendRow(grand_grand_child)

            column_view.model().appendRow(parent)

        column_view.setColumnWidths([200, 200, 200, 100])

        self.setGeometry(300, 300, 1000, 300)
        self.setWindowTitle('IQ XML Creator')
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = xml_creator()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
2
Felipe Barbosa 6 Июл 2016 в 22:27
Этот код кажется неполным. Можете ли вы создать рабочий пример (и исключить некоторые ненужные части), чтобы мы могли сосредоточиться на вопросе.
 – 
strubbly
7 Июл 2016 в 17:53
Я заполнил код. У вас есть идеи, как я могу отобразить ['OFF', 'ON'] в виде поля со списком?
 – 
Felipe Barbosa
7 Июл 2016 в 19:12
Я подумал, что вы можете сделать это с помощью ItemDelegate, но я попробовал и не смог заставить его работать, извините.
 – 
strubbly
11 Июл 2016 в 11:24

1 ответ

Лучший ответ

Я не мог найти решение для этого, но я нашел обходной путь, поэтому я публикую в надежде помочь тем, у кого такая же проблема, как и у меня.

Как только я не смог поместить поле со списком в QColumnView, как я пытался, моим обходным решением было создать таблицу, заполненную списками, которые я хотел, а затем установить этот QTable в качестве виджета предварительного просмотра в QColumnView.

1
Felipe Barbosa 8 Сен 2016 в 16:32