Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2015 02:00:25

Pomidor
Зарегистрирован: 2015-01-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Выпадающий список QTableWidget

День добрый. Подскажите пожалуйста, как сделать выпадающий список в ячейке 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”

Отредактировано Pomidor (Янв. 31, 2015 02:02:53)

Офлайн

#2 Янв. 31, 2015 23:43:43

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

Выпадающий список QTableWidget

Наиболее, на мой взгляд, подходит для таких целей 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)

Офлайн

#3 Фев. 1, 2015 01:58:33

Pomidor
Зарегистрирован: 2015-01-23
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Выпадающий список QTableWidget

Супер, просто идеально)
Спасибо!!!!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version