刷新QPixmap的函数
时间: 2024-06-02 19:04:52 浏览: 69
在Qt中,可以使用QPixmap类来操作图片,刷新QPixmap可以通过重新设置图片或者调用repaint()函数实现。下面是两种方法的示例代码:
1. 重新设置图片
```python
pixmap = QPixmap("image.png") # 加载图片
label.setPixmap(pixmap) # 设置label显示图片
```
2. 调用repaint()函数
```python
label.repaint() # 重新绘制label
```
需要注意的是,如果QPixmap对象已经被销毁,那么再调用repaint()函数是没有效果的,必须重新设置图片。同时,如果想要在窗口大小改变时自动刷新QPixmap,可以将repaint()函数放在resizeEvent()函数中。
相关问题
class Faceshow(QMainWindow, Ui_MainWindow): def init(self, parent=None): super(Faceshow, self).init(parent) self.setupUi(self) self.main_button.clicked.connect(self.show_resu) self.main_exit.clicked.connect(self.quit) self.form = None def show_resu(self): try: img1, img2, img3, img4, text1, text2 = start() except Exception as e: print(e) return img1 = ndarray_to_qpixmap(img1) img2 = ndarray_to_qpixmap(img2) img3 = ndarray_to_qpixmap(img3) img4 = ndarray_to_qpixmap(img4) self.form = RESUshow(img1, img2, img3, img4, text1, text2) self.form.pushButton.clicked.connect(self.form.save_img4) self.form.show() def quit(self): self.close() if name == 'main': hxz = QApplication(sys.argv) ui = Faceshow() ui.show() sys.exit((hxz.exec_())) 修改上述代码,使得start()函数出现异常后,刷新主界面并不影响槽函数的再次触发
您可以在show_resu函数中添加一个try-except语句,并在except语句中处理异常,例如显示一个错误消息框。同时,您可以将self.form设为None,以确保每次重新打开时都会创建新的RESUshow对象。
修改后的代码如下:
```python
from PyQt5.QtWidgets import QMessageBox
class Faceshow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Faceshow, self).__init__(parent)
self.setupUi(self)
self.main_button.clicked.connect(self.show_resu)
self.main_exit.clicked.connect(self.quit)
self.form = None
def show_resu(self):
try:
img1, img2, img3, img4, text1, text2 = start()
except Exception as e:
print(e)
QMessageBox.warning(self, 'Error', 'Failed to process images.')
return
img1 = ndarray_to_qpixmap(img1)
img2 = ndarray_to_qpixmap(img2)
img3 = ndarray_to_qpixmap(img3)
img4 = ndarray_to_qpixmap(img4)
if self.form:
self.form.close()
self.form = RESUshow(img1, img2, img3, img4, text1, text2)
self.form.pushButton.clicked.connect(self.form.save_img4)
self.form.show()
def quit(self):
self.close()
if __name__ == '__main__':
hxz = QApplication(sys.argv)
ui = Faceshow()
ui.show()
sys.exit(hxz.exec_())
```
怎么使用这个函数时 def on_click(self): self.print_window('检测完毕') newname = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) main(newname) pixmap = QPixmap('%s.png' % newname) self.label.setPixmap(pixmap) self.label.setScaledContents(True) 每次刷新显示的图片不重叠
您可以在每次更新图片前,先将`QLabel`中的`pixmap`对象置空,再更新`pixmap`。这样可以确保每次更新图片时,都是在一个空的`QLabel`中显示。修改后的代码如下:
```python
from PyQt5.QtGui import QPixmap
def on_click(self):
self.print_window('检测完毕')
# 先将 QLabel 中的 pixmap 置空
self.label.setPixmap(None)
newname = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
main(newname)
pixmap = QPixmap('%s.png' % newname)
self.label.setPixmap(pixmap)
self.label.setScaledContents(True) # 图片适应 label 的大小
```
在这个示例中,我们在更新图片前先调用`self.label.setPixmap(None)`将`QLabel`中的`pixmap`置空。这样可以确保每次更新图片时,都是在一个空的`QLabel`中显示。
阅读全文