Форум сайта python.su
День добрый. Подскажите пожалуйста, как сделать выпадающий список в ячейке QtableWidget?
Читал, нашёл только QComboBox впихнуть в ячейку. Но нужно значение из него получать, а количество комбобоксов заренее не известно (пользователь может добавлять и удалять их) - нужно как-то при считывании таблицы получать значение комбобокса для каждой ячейки.
Но может ещё какие-нибудь виджеты есть для добавления выпадающего списка в ячейку?
Добавляю комбобокс как-то так.
... current_count = self.table[self.tab_widget.currentIndex()].currentRow() self.table[self.tab_widget.currentIndex()].insertRow(self.table[self.tab_widget.currentIndex()].currentRow()) combo = QComboBox(self.tab1) machines = ["car1", "car2", "car3", "car4"] for i in machines: combo.addItem(i) combo.activated.connect(lambda: self.combobox_row_write(combo.currentText())) self.table[self.tab_widget.currentIndex()].setCellWidget(current_count, 0, combo) ...
Отредактировано Pomidor (Янв. 31, 2015 02:02:53)
Офлайн
Наиболее, на мой взгляд, подходит для таких целей QtGui.QItemDelegate.
Вот пример:
#!/usr/bin/env python2 # -*- coding: iso-8859-5 -*- from PyQt4 import QtGui,QtCore #------------------- 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(["car1", "car2", "car3", "car4"]) #Загрузить в список свои данные editor.activated.connect(self.emitCommitData) return editor def setEditorData(self, editor, index): pos = 0 editor.setCurrentIndex(pos) def setModelData(self, editor, model, index): print "currentText=", editor.currentText() model.setData(index, editor.currentText()) def emitCommitData(self): pass #сделать то, что требуется, например где-то ещё сохранить #--------- class TableW(QtGui.QWidget): def __init__(self, parent=None): super(TableW, self).__init__(parent, QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowSystemMenuHint) items = ["car1", "car2", "car3", "car4"] self.itemsTable = QtGui.QTableWidget(len(items), 2) # self.itemsTable.setItemDelegate(ComboBoxDelegate(self)) #for all cells # self.itemsTable.setItemDelegateForRow(0, ComboBoxDelegate(self)) #for row number 0 self.itemsTable.setItemDelegateForColumn(0, ComboBoxDelegate(self)) #for column number 0 for row, item in enumerate(items): name = QtGui.QTableWidgetItem(item) # name.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable) self.itemsTable.setItem(row, 0, name) self.itemsTable.setItem(row, 1,QtGui.QTableWidgetItem(str(row))) layout = QtGui.QVBoxLayout() layout.addWidget(self.itemsTable) self.setLayout(layout) #------------ if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) table = TableW() table.show() res = app.exec_() table = 0 sys.exit(res)
Отредактировано KriO (Янв. 31, 2015 23:44:40)
Офлайн
Супер, просто идеально)
Спасибо!!!!
Офлайн