pyqt5踩坑记录

pyqt5

  • 1. QTableWidget的速度问题
  • 2. QEditText监听文字变化
  • 3. QpushButton循环动态创建按钮,对应同一个槽函数,响应输出对应的按钮名称
  • 4. 将内存中图像数组转换QPixmap、QImage

1. QTableWidget的速度问题

数据库分页查询写入表格时,表格刷新过慢,平均耗时15s。导致时长原因是self.table_widget.horizontalHeader().setSectionResizeMode(col, QHeaderView.ResizeToContents)

'''刷新表格'''

    def refresh(self):
        self.table_widget.clearContents()
        for row in range(self.fetched_data.__len__()):
            for col in range(11):
                temp = QTableWidgetItem(str(self.fetched_data[row][col]))
                temp.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)  # 设置不能编辑
                self.table_widget.setItem(row, col, temp)
         # for col in range(11):
        #     self.table_widget.horizontalHeader().setSectionResizeMode(col, QHeaderView.ResizeToContents)

        # self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

解决办法:禁用horizontalHearer的setSextionResizeMode。耗时1s以内。

2. QEditText监听文字变化

解决方法:

'''信号与槽装饰器@pyqtSlot()'''
@PyQt5.QtCore.pyqtSlot(参数)
def on_发送者对象名称_发射信号名称(self, 参数):
    pass
	self.textedit = QTextEdit(self)
	self.textedit.setObjectName("edit")
    @pyqtSlot()
    def on_edit_textChanged(self):
		text = self.textedit.toPlainText()
    	print(text)          

3. QpushButton循环动态创建按钮,对应同一个槽函数,响应输出对应的按钮名称

传递参数的点击事件必须用lambda方法

for i in range(10):
            self.btn[i] = QPushButton(str(i),self)
    		self.btn[i].clicked.connect(lambda: self.btn_clicked(self.sender().text()))
    		# 连接槽函数并传递按钮参数

def btn_clicked(self,arg):
     print(arg)

4. 将内存中图像数组转换QPixmap、QImage

从数据库写入本地图片,再从本地读取图片显示过慢

   photo = QtGui.QPixmap(IMAGE_DIR + str(self.tasks_table[self.stepNo]['step']) + '.png').scaled(self.label_pic.width(),self.label_pic.height())

改为从从数据库中存储的blob数据加载直接显示

qimg = QtGui.QImage.fromData(self.tasks_table[self.stepNo]['image']).scaled(self.label_pic.width(),self.label_pic.height())
photo = QtGui.QPixmap.fromImage(qimg)

速度明显提升

你可能感兴趣的:(pyqt5,python,pyqt5)