在主线程里面就一个 for 循环,然后程序就出现卡顿,代码如下:
n_machine = len(data) # 机器数量
# 假数据
if data == {} or data is None:
for i in range(1, n_machine + 1):
data['%d' % i] = ('故障代码' + str(i), '控制代码' + str(i),
'锁状态' + str(i), '实时角度' + str(i))
# 首先清理表格
table_model = QStandardItemModel()
table_model.clear()
# 填充数据
for machine_number in range(1, n_machine + 1):
i, j = self.get_row_col(machine_number)
item0 = QStandardItem(str(data[machine_number][0]))
table_model.setItem(i, j, QStandardItem("%d号跟踪器故障代码" % (machine_number)))
table_model.setItem(i, j + 1, item0)
item1 = QStandardItem(str(data[machine_number][1]))
table_model.setItem(i + 1, j, QStandardItem("%d号跟踪器控制代码" % (machine_number)))
table_model.setItem(i + 1, j + 1, item1)
item2 = QStandardItem(str(data[machine_number][2]))
table_model.setItem(i + 2, j, QStandardItem("%d号跟踪器锁状态" % (machine_number)))
table_model.setItem(i + 2, j + 1, item2)
item3 = QStandardItem(str(data[machine_number][3]))
table_model.setItem(i + 3, j, QStandardItem("%d号跟踪器实时角度" % (machine_number)))
table_model.setItem(i + 3, j + 1, item3)
解决办法:
把这个耗时的操作放在子线程中,子线程完成数据处理后,调用主线程更新界面函数,完成界面更新,这样界面才不会出现卡顿。