PyQT QSqlRelationalDelegate组合框

时间:2016-01-16 18:54:38

标签: combobox pyqt pyqt5 qsqltablemodel

我有一个带有Qtableview和QSqlRelationalTableModel的表单。我想要两个列只能读取,一个是组合框,一个是旋转框,但具有特定范围(没有负数。)

没有QSqlRelationalDelegate的开箱即用,视图在第三列和一个旋转框上自动使用组合框。在尝试将验证放入spinbox时,我发现它解决了前两列的readonly问题。我唯一的问题是如何使用外键在相关字段上正确实现组合框。我已经能够显示一个组合框,但是我无法看到如何从外键中填充选项。

如何填充组合框?

参见代码

    def setup_rates_view(self):
        self.rates_model = QSqlRelationalTableModel(self)
        self.rates_model.setTable("rates_stay")
        self.rates_model.setRelation(6, QSqlRelation("rates", "rate_code", "rate_description"))
        self.rates_model.setFilter("id_bookings = '{0}'".format(myapp.res_id))
        self.rates_model.setHeaderData(1, Qt.Horizontal, "Date")
        self.rates_model.setHeaderData(2, Qt.Horizontal, "Basis")
        self.rates_model.setHeaderData(6, Qt.Horizontal, "Code")
        self.rates_model.setHeaderData(4, Qt.Horizontal, "Amount")
        self.rates_model.select()
        self.rates_view = self.ui.rates
        self.rates_view.setModel(self.rates_model)
        self.rates_view.setItemDelegate(QSqlRelationalDelegate(self.rates_view))
        self.rates_view.setColumnHidden(0, True)
        self.rates_view.setColumnHidden(3, True)
        self.rates_view.setColumnHidden(5, True)
        self.rates_view.horizontalHeader().moveSection(4,6)
        self.rates_view.resizeColumnsToContents()
        self.rates_view.setItemDelegate(Viewrates(self))

class Viewrates(QSqlRelationalDelegate):
    def __init__(self, parent=None):
        QItemDelegate.__init__(self)


    def createEditor(self, parent, option, index):
        if index.column() == 4:
            spinbox = QSpinBox(parent)
            spinbox.setRange(0,10000)
            return spinbox
        elif index.column() == 6:
            combo = QComboBox(parent)
            combo.setModel()
            return combo

0 个答案:

没有答案