2016-07-06 3 views
2

Сценарий: Мне нужно поставить поле со списком внутри 4-го столбца в qcolumnview, чтобы пользователь мог выбрать ВКЛ или ВЫКЛ.Как разместить QComboBox внутри 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() 
+0

Этот код не является полным. Можете ли вы создать рабочий пример (и выделить некоторые из ненужных частей), чтобы мы могли сосредоточиться на вопросе. – strubbly

+0

Я закончил код. Вы знаете, как я могу отображать ['OFF', 'ON'] в качестве поля со списком? –

+0

Я решил, что вы можете сделать это с помощью «ItemDelegate», но у меня был выход, и я не мог заставить его работать, извините. – strubbly

ответ

1

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

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

Смежные вопросы