【问题标题】:Need to delay the item changed signal till my data is loaded需要延迟项目更改信号直到我的数据加载
【发布时间】:2021-09-23 00:57:03
【问题描述】:

我正在一个 tablewidget 上加载一个 mysql 数据库。

我有两个函数连接到我的 QTable 小部件中的项目更改信号。第一个列出更改的单元格,而第二个用于管理表格小部件单元格中输入的数据类型,如果输入了错误的数据类型,则会显示错误消息。

问题是这些函数在我加载数据库之前就可以工作。有效地存储我不想要的单元格列表并在加载时弹出连续的错误消息。

如何在加载数据库之前停止功能工作?

def log_change(self, item):
    self.changed_items.append([item.row(),item.column()])


def item_changed(self, Qitem,item):
    if (item.column())%2 == 0:
        try:
            test = float(Qitem.text())
        except ValueError:
            Msgbox = QMessageBox()
            Msgbox.setText("Error, value must be number!")
            Msgbox.exec()
            Qitem.setText(str(''))

【问题讨论】:

    标签: python mysql pyqt5 qtablewidget


    【解决方案1】:

    有两种选择:

    • 使用标志:
        # in constructor
        self.is_loading = False
    
    def load_from_db(self):
        # in load function
        self.is_loading = True
        # load from db
        # ...
        self.is_loading = False
    
    # foo_callback is item_changed by example
    def foo_callback(self, arg1, arg2, ...):
        if self.is_loading:
             return
        # do work
    
    • 使用块信号
    self.tablewidget.blockSignals(True)
    # load from db
    # ...
    self.tablewidget.blockSignals(False)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2010-10-20
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多