Форум сайта python.su
0
Здравствуйте! Подскажите пожалуйста, как сделать, чтобы в таблице одна из ячеек содержала выпадающий список(типа 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_())
Офлайн
Посмотри тут, вроде на стеке решение есть
https://www.google.ru/search?q=pyqt4+combobox+in+table&oq=pyqt4+Combobox+in+table&
Офлайн
9
Определяете класс:
#вызывается по двойному клику в ячейке таблицы 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())
Офлайн
0
Спасибо большое за ответы)) Разбираюсь.
Офлайн