使用PyQt中的变量引用视图,模型和小部件

时间:2016-01-11 17:58:59

标签: pyqt pyqt5

我正在使用Pyqt5,我有一个标签小部件,其中有4个标签,其中包含完全相同的小部件布局 - 表格视图和几个按钮。不同之处在于每个选项卡根据一个数据库字段显示略有不同的数据视图,该数据库字段是1到4的整数。以下是设置模型和视图的代码片段:

def setup_folio1(self):
    self.folio1_model = QSqlQueryModel(self)
    self.folio1_model.setQuery("SELECT trans_timestamp, person, charge_code, description, dr, cr, id from "
                               " transactions where folio = 1 and account = '{0}' ORDER BY trans_timestamp".format(myapp.res_id))
    self.folio1_model.setHeaderData(0, Qt.Horizontal, "Time stamp")
    self.folio1_model.setHeaderData(1, Qt.Horizontal, "User")
    self.folio1_model.setHeaderData(2, Qt.Horizontal, "Charge code")
    self.folio1_model.setHeaderData(3, Qt.Horizontal, "Description")
    self.folio1_model.setHeaderData(4, Qt.Horizontal, "Debit")
    self.folio1_model.setHeaderData(5, Qt.Horizontal, "Credit")

    self.folio1_view = self.ui.folio1_1
    self.folio1_view.setModel(self.folio1_model)

    self.folio1_view.setColumnWidth(0, 120)
    self.folio1_view.setColumnWidth(1, 80)
    self.folio1_view.setColumnWidth(2, 80)
    self.folio1_view.setColumnWidth(3, 395)
    self.folio1_view.setColumnWidth(4, 50)
    self.folio1_view.setColumnWidth(5, 50)
    self.folio1_view.setColumnHidden(6, True)
    self.folio1_view.setSelectionBehavior(QTableView.SelectRows)
    self.folio1_view.setDragEnabled(True)

    cr_total = dr_total  = 0
    for i in range(self.folio1_model.rowCount()):
        dr_total = dr_total + self.folio1_model.index(i,4).data()
        cr_total = cr_total + self.folio1_model.index(i,5).data()
    self.ui.folio1_balance.setText(str(dr_total - cr_total))

def setup_folio2(self):
    self.folio2_model = QSqlQueryModel(self)

正如你所看到的,我重复大部分相同的代码来设置一个数字本质上是不同的 - 无论它是SQL查询的参数还是更重要的是小部件的名称。

作为PyQT的新手,我无法弄清楚如何可变地引用这些模型,视图和小部件。我想有一个像

这样的方法
def setup_folios(self, folio_num=0):

并且循环调用方法或在方法内循环。我想根据数据改变选项卡的数量,但这是第二阶段。我找到了tabwidgets.count()但是我想使用整数来引用代码中的模型,视图和小部件。

0 个答案:

没有答案