将数据库对象传递给子类QSqlTableModel

时间:2018-10-30 18:51:26

标签: python python-3.x pyqt pyqt5

不知道为什么我不能通过这个,但是我试图继承QSQLTableModel,我必须将数据库传递给它……但是我不确定如何。

class SclDataModel(QSqlTableModel):
    def __init__(self,parent=None):
        super(SclDataModel, self).__init__(parent)

class SclDataBrowse(QWidget):
    def __init__(self, parent=None):
        super(SclDataBrowse, self).__init__(parent)
        self.setup_db()
        self.setup_model()

    def setup_db(self):
        self.db = QSqlDatabase("QMYSQL")
        self.db.setHostName("myhost")
        self.db.setUserName("myuser")
        self.db.setPassword("mypassword")
        self.db.setDatabaseName("mydbname")
        self.db.open()

    def setup_model(self):
        self.model = SclDataModel(self,self.db)

可以在这里稍加推动。谢谢。

1 个答案:

答案 0 :(得分:1)

有很多解决方案:

  • 如果您不想在构造函数中执行任何操作,则不要覆盖它,因此子类将使用父类的相同构造

如果您不想覆盖任何内容,则可以使用pass

class SclDataModel(QSqlTableModel):
    pass

或者,如果您要实现其他方法,则不必pass

class SclDataModel(QSqlTableModel):
    def other_method(self, some_args):
        # some code
  • 如果您想在构造函数中做某事,一个选择是使用same constructor作为父类

class SclDataModel(QSqlTableModel):
    def __init__(self, parent=None, db=QSqlDatabase()):
        super(SclDataModel, self).__init__(parent, db)
        # other code
  • 如果您不想担心使用*args**kwargs

class SclDataModel(QSqlTableModel):
    def __init__(self, *args, **kwargs):
        super(SclDataModel, self).__init__(*args, **kwargs)
        # other code

了解继承用于自定义类,因此,例如,继承的类的构造函数无法与父类的构造函数匹配,例如:

class SclDataModel(QSqlTableModel):
    def __init__(self, arg1, arg2=v_default,parent=None, db=QSqlDatabase()):
        super(SclDataModel, self).__init__(parent, db)
        self._arg1 = arg1
        self._arg2 = arg2
        # other code

最后,构造函数的参数将取决于您的需求