gpt4 book ai didi

python - 将多个像素图显示到滚动区域的最有效方法是什么?

转载 作者:行者123 更新时间:2023-12-01 06:00:41 25 4
gpt4 key购买 nike

我正在尝试使用 PyQt4 和 python-poppler-qt4 制作一个显示 PDF 文件的应用程序。

到目前为止,我已经成功地通过加载由 Poppler 生成的像素图、设置在 QLabel 上并附加到 QFrame 来显示整个文档。 QFrame 显示在 QScrollArea 中。

它看起来相当不错,直到实现缩放,这是通过重新生成像素图并增加分辨率来完成的。此过程需要将整个文档渲染为像素图,这显然需要时间并导致不必要的延迟。

逻辑希望我应该只显示我正在看到的页面的图像(这听起来像量子物理学)。我心里有两个选择:

  1. 使用 QLabels 创建空白页面,并在它们在滚动区域中可见时将图像加载到其上;
  2. 仅创建一个页面,并在显示该页面之前添加或删除前一页或后续页面。

我不确定我是否走在正确的道路上,或者是否有其他选择。

第一个选项似乎更可行,因为空白页面的可见性决定了何时必须上传像素图(尽管我不知道如何在页面隐藏时删除该像素图)。但我不确定这种方式缩放是否会更快,因为必须重新生成 600 页的文档,尽管其中有空白页。

第二个选项肯定会改进缩放功能,因为缩放时必须一次重新生成 1 到 4 页。然而,在第二种情况下,我不确定如何触发页面的构建。

你有什么建议?

最佳答案

忘记QLabel直接绘制图像不是很简单吗:

from PyQt4.QtGui import *
import sys

app = QApplication(sys.argv)

class Test(QWidget):

def __init__(self):
super(Test, self).__init__()
self.painter = QPainter()
# placeholder for the real stuff to draw
self.image = QImage("/tmp/test.jpg")

def paintEvent(self, evt):
rect = evt.rect()
evt.accept()
print rect
self.painter.begin(self)
zoomedImage = self.image # ... calculate this for your images
sourceRect = rect # ... caluclate this ...
# draw it directly
self.painter.drawImage(rect, self.image, sourceRect)
self.painter.end()


t = Test()
t.setGeometry(0,0,600,800)

s = QScrollArea()
s.setWidget(t)

s.setGeometry(0,0,300,400)
s.show()
app.exec_()

关于python - 将多个像素图显示到滚动区域的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com