Найти - Пользователи
Полная версия: Выпадающий список QTableWidget
Начало » GUI » Выпадающий список QTableWidget
1
Pomidor
День добрый. Подскажите пожалуйста, как сделать выпадающий список в ячейке 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)
...
Заранее благодарю!

з.ы. если принтить ячейку с комбобоксом выдаёт “Non Type”
KriO
Наиболее, на мой взгляд, подходит для таких целей 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)
Pomidor
Супер, просто идеально)
Спасибо!!!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB