Найти - Пользователи
Полная версия: QComboBox и QTableView. Как подружить?
Начало » GUI » QComboBox и QTableView. Как подружить?
1
Pluto
rom PyQt4 import QtGui
class window(QtGui.QWidget):
    def __init__(sf):
        QtGui.QWidget.__init__(sf)
        sf.setWindowTitle("Прикрепление источника данных к комбобоксу")
        sf.resize(400, 400)
        sf.layout = QtGui.QVBoxLayout()
        sf.setLayout(sf.layout)
        sf.model = QtGui.QStandardItemModel(5, 2)
        sf.fillmodel()
        
        sf.combo = QtGui.QComboBox()
        sf.combo.setModel(sf.model)
        sf.combo.setModelColumn(1)
        sf.layout.addWidget(sf.combo)
        sf.view2 = QtGui.QTableView()
        sf.view2.setModel(sf.model)
        sf.layout.addWidget(sf.view2)
        sf.combo2 = QtGui.QComboBox()
        sf.combo2.setView(sf.view2)
        sf.layout.addWidget(sf.combo2)
        sf.layout.addStretch()
    def fillmodel(sf):
        mass = [[1, "Один"],
                [2, "Два"],
                [3, "Три"],
                [4, "Четыре"],
                [5, "Пять"]]
        sf.model.setHorizontalHeaderItem(0, QtGui.QStandardItem("Номер"))
        sf.model.setHorizontalHeaderItem(1, QtGui.QStandardItem("Описание"))
        
        for number, string in mass:
            sf.model.setItem(number-1, 0, QtGui.QStandardItem(str(number)))
            sf.model.setItem(number-1, 1, QtGui.QStandardItem(string))
        for i in range(sf.model.rowCount()):
            print (sf.model.item(i, 0).text(), sf.model.item(i, 1).text())
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    win = window()
    win.show()
    sys.exit(app.exec_())

Почему combo2 не желает показывать модель? Зачем у комбобокса есть метод setView тогда?
Pluto
К sf не придираться! Мне религия не позволяет писать self!
Pluto
Скажите, почему view2 вообще не показывается на форме как отдельный виджет? Что не так?
ilnur
sf.combo2 = QtGui.QComboBox()
# sf.combo2.setView(sf.view2)
sf.layout.addWidget(sf.view2)
sf.layout.addWidget(sf.combo2)
вот так, отображается
Rodegast
> Почему combo2 не желает показывать модель?
Наверно потому что у него нет модели. Она только у sf.combo. Так заработает:

sf.combo2.setModel(sf.model)

> К sf не придираться! Мне религия не позволяет писать self!
На костёр!
Pluto
Я уж сам разобрался почему представление не показывалось на форме. Модель может использоваться и одна, а вот представления для разных объектов должны создаваться для каждого свой экземпляр.

Но, таки, combobox не умеет работать с представлением (view)? Зачем же у него есть метод setView?

Rodegast
На костёр!
Слава sf!
Rodegast
Ты только про костёр прочитал?
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