Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2014 19:36:45

__Ak1m__
Зарегистрирован: 2013-02-04
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4.Combobox в ячейке таблицы TableView.

Здравствуйте! Подскажите пожалуйста, как сделать, чтобы в таблице одна из ячеек содержала выпадающий список(типа Combobox). Спасибо за ответ.

from PyQt4 import QtCore, QtGui
class SoilWindow(QtGui.QWidget):
    def __init__ (self, parent = None):
        super(SoilWindow, self).__init__(parent)
        self.vbox1 = QtGui.QVBoxLayout()
        self.setLayout(self.vbox1)
        self.columns_names = [
        u'Обозначение', u'Тип грунта', u'Вид грунта',u'Плотность',
        u'I_L',u'I_p',u'c_I',u'c_II',u'phi_I',u'phi_II',u'E',u'Ee'
        ]
        self.model = QtGui.QStandardItemModel(1,len(self.columns_names))
        self.model.setHorizontalHeaderLabels(self.columns_names)
        self.soil_table = QtGui.QTableView()
        self.soil_table.setModel(self.model)
        self.vbox1.addWidget(self.soil_table)
        self.hbox1 = QtGui.QHBoxLayout()
        self.setLayout(self.hbox1)
        self.vbox1.addLayout(self.hbox1)
        self.btn_add_row = QtGui.QPushButton(u'Добавить строку')
        self.hbox1.addStretch(0)
        self.hbox1.addWidget(self.btn_add_row)
        self.connect(self.btn_add_row,QtCore.SIGNAL('clicked()'),self.add_row)
        self.btn_rmv_row = QtGui.QPushButton(u'Удалить строку')
        self.hbox1.addWidget(self.btn_rmv_row)
        self.connect(self.btn_rmv_row,QtCore.SIGNAL('clicked()'),self.remove_row)
    def resizeColumns(self):
            for column in self.columns_names:
                self.soil_table.resizeColumnToContents(column)
    def make_widgets(self):
        pass
    def add_row(self):
        self.new_row = QtGui.QStandardItem()
        self.model.appendRow(self.new_row)
    def remove_row(self):
        index = self.soil_table.currentIndex()
        row = index.row()
        self.model.removeRows(row,1)
if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = SoilWindow()
    window.setWindowTitle(u'Задание характеристик грунтов')
    window.show()
    sys.exit(app.exec_())

Офлайн

#2 Янв. 28, 2014 20:12:58

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

PyQt4.Combobox в ячейке таблицы TableView.

Посмотри тут, вроде на стеке решение есть
https://www.google.ru/search?q=pyqt4+combobox+in+table&oq=pyqt4+Combobox+in+table&

Офлайн

#3 Янв. 31, 2014 18:48:04

KriO
Зарегистрирован: 2012-10-07
Сообщения: 61
Репутация: +  9  -
Профиль   Отправить e-mail  

PyQt4.Combobox в ячейке таблицы TableView.

Определяете класс:

#вызывается по двойному клику в ячейке таблицы
class ComboBoxDelegate(QtGui.QItemDelegate):
    def __init__(self, parent):
        super(ComboBoxDelegate, self).__init__(parent)
    def createEditor(self, parent, option, index):
        editor = QtGui.QComboBox(parent)
        editor.addItems(["aa","bb","cc"])        #список для комбобокса
        return editor
    def setEditorData(self, editor, index):
        pos = 0
        editor.setCurrentIndex(pos)
    def setModelData(self, editor, model, index):
        model.setData(index, editor.currentText())

В своём классе SoilWindow назначаете делегата для нужной колонки таблицы, например,
для column = 1
self.soil_table.setItemDelegateForColumn(colmun, ComboBoxDelegate(self))

Офлайн

#4 Янв. 31, 2014 20:54:07

__Ak1m__
Зарегистрирован: 2013-02-04
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4.Combobox в ячейке таблицы TableView.

Спасибо большое за ответы)) Разбираюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version