Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 显示多个图像_Python_Python 3.x_Pyqt_Pyqt4_Qscrollarea - Fatal编程技术网

Python 显示多个图像

Python 显示多个图像,python,python-3.x,pyqt,pyqt4,qscrollarea,Python,Python 3.x,Pyqt,Pyqt4,Qscrollarea,我是PyQt4的新手,我试图在一个QScrollArea中显示图像,但我只显示了一个,而且总是最后一个图像。如何在QScrollArea中显示多个图像?有没有更好的方法来显示多个图像 这是我的密码: scrollArea = QtGui.QScrollArea(self) scrollArea.setWidgetResizable(False) scrollArea.setGeometry(210, 150, 800, 450) highlightLbl = QtGui.QLabel(self)

我是PyQt4的新手,我试图在一个QScrollArea中显示图像,但我只显示了一个,而且总是最后一个图像。如何在QScrollArea中显示多个图像?有没有更好的方法来显示多个图像

这是我的密码:

scrollArea = QtGui.QScrollArea(self)
scrollArea.setWidgetResizable(False)
scrollArea.setGeometry(210, 150, 800, 450)
highlightLbl = QtGui.QLabel(self)
highlight_dir = url + '\\highlighted'
scrollArea = QtGui.QScrollArea(self)
scrollArea.setWidgetResizable(False)
scrollArea.setGeometry(210, 150, 800, 450)
for file in os.listdir(highlight_dir):
    highlighted_img = QtGui.QPixmap(os.path.join(highlight_dir, file))
    highlightLbl.setPixmap(highlighted_img)
    scrollArea.setWidget(highlightLbl) 

QScrollArea您只能设置一个小部件,但如果您想显示多个小部件,则必须使用单个小部件的布局来放置它。另一方面,在代码中,您使用的是单个QLabel,而在循环中,您只更改图像,因此您只能看到最后一个图像

考虑到上述情况,解决方案如下:

import os
from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        url = # ...
        highlight_dir = url + '\\highlighted'

        self.scrollArea = QtGui.QScrollArea(widgetResizable=True)
        self.setCentralWidget(self.scrollArea)
        content_widget = QtGui.QWidget()
        self.scrollArea.setWidget(content_widget)
        lay = QtGui.QVBoxLayout(content_widget)

        for file in os.listdir(highlight_dir):
            pixmap = QtGui.QPixmap(os.path.join(highlight_dir, file))
            if not pixmap.isNull():
                label = QtGui.QLabel(pixmap=pixmap)
                lay.addWidget(label)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
另一方面,如果文件夹中有许多图像,小部件将延迟显示,这可能会让用户感到不快,一种可能的替代方法是使用QTimer进行迭代,一点一点地加载图像

导入操作系统 从PyQt4导入QtCore、QtGui 类MainWindowQtGui.QMainWindow: def u_init__self,父项=无: 超级主窗口,self.\u初始\u父窗口 url=。。。 突出显示\u dir=url+'\\突出显示' self.scrollArea=QtGui.qscrolllareawidgetResizeable=True self.setCentralWidgetself.scrollArea content\u widget=QtGui.QWidget self.scrollArea.setWidgetcontent\u小部件 self.\u lay=QtGui.QVBoxLayoutcontent\u小部件 self.files\u it=iter[os.path.joinhighlight\u dir,os.listdirhighlight\u dir中的文件对应文件] self._timer=QtCore.QTimerself,间隔=1 self.\u timer.timeout.connectself.on\u超时 自动启动 def on_timeoutself: 尝试: file=nextself.files\u它 pixmap=QtGui.qpixmap文件 self.add_pixmappixmap 除停止迭代外: 自动停止 def add_pixmapself,pixmap: 如果不是pixmap.isNull: label=QtGui.QLabelpixmap=pixmap self.\u lay.addWidgetlabel 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 导入系统 app=QtGui.QApplicationsys.argv w=主窗口 w、 展示 sys.exitapp.exec_ PyQt5:

导入操作系统 从PyQt5导入QtCore、QtGui、QtWidgets 类MainWindowQtWidgets.QMainWindow: def u_init__self,父项=无: 超级主窗口,self.\u初始\u父窗口 url=。。。 突出显示\u dir=url+'\\突出显示' self.scrollArea=QtWidgets.qscrollaReawidGetResizeable=True self.setCentralWidgetself.scrollArea content\u widget=qtwidts.QWidget self.scrollArea.setWidgetcontent\u小部件 self.\u lay=qtwidts.QVBoxLayoutcontent\u小部件 self.files\u it=iter[os.path.joinhighlight\u dir,os.listdirhighlight\u dir中的文件对应文件] self._timer=QtCore.QTimerself,间隔=1 self.\u timer.timeout.connectself.on\u超时 自动启动 def on_timeoutself: 尝试: file=nextself.files\u它 pixmap=QtGui.qpixmap文件 self.add_pixmappixmap 除停止迭代外: 自动停止 def add_pixmapself,pixmap: 如果不是pixmap.isNull: label=qtwidts.QLabelpixmap=pixmap self.\u lay.addWidgetlabel 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 导入系统 app=qtwidts.QApplicationsys.argv w=主窗口 w、 展示 sys.exitapp.exec_
QScrollArea您只能设置一个小部件,但如果您想显示多个小部件,则必须使用单个小部件的布局来放置它。另一方面,在代码中,您使用的是单个QLabel,而在循环中,您只更改图像,因此您只能看到最后一个图像

考虑到上述情况,解决方案如下:

import os
from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        url = # ...
        highlight_dir = url + '\\highlighted'

        self.scrollArea = QtGui.QScrollArea(widgetResizable=True)
        self.setCentralWidget(self.scrollArea)
        content_widget = QtGui.QWidget()
        self.scrollArea.setWidget(content_widget)
        lay = QtGui.QVBoxLayout(content_widget)

        for file in os.listdir(highlight_dir):
            pixmap = QtGui.QPixmap(os.path.join(highlight_dir, file))
            if not pixmap.isNull():
                label = QtGui.QLabel(pixmap=pixmap)
                lay.addWidget(label)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
另一方面,如果文件夹中有许多图像,小部件将延迟显示,这可能会让用户感到不快,一种可能的替代方法是使用QTimer进行迭代,一点一点地加载图像

导入操作系统 从PyQt4导入QtCore、QtGui 类MainWindowQtGui.QMainWindow: def u_init__self,父项=无: 超级主窗口,self.\u初始\u父窗口 url=。。。 突出显示\u dir=url+'\\突出显示' self.scrollArea=QtGui.qscrolllareawidgetResizeable=True self.setCentralWidgetself.scrollArea content\u widget=QtGui.QWidget self.scrollArea.setWidgetcontent\u小部件 self.\u lay=QtGui.QVBoxLayoutcontent\u小部件 self.files\u it=iter[os.path.joinhighlight\u dir,os.listdirhighlight\u dir中的文件对应文件] self._timer=QtCore.QTimerself,间隔=1 self.\u timer.timeout.connectself.on\u超时 自动启动 def on_timeoutself: 尝试: file=nextself.files\u它 pixmap=QtGui.qpixmap文件 self.add_pixmappixmap 除停止迭代外: 自动停止 def add_pixmapself,pixmap: 如果不是pixmap.isNull: label=QtGui.QLabelpixmap=pixmap self.\u lay.addWidgetlabel 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 导入系统 app=QtGui.QApplicationsys.argv w=主窗口 w、 展示 系统 .exitap.exec_ PyQt5:

导入操作系统 从PyQt5导入QtCore、QtGui、QtWidgets 类MainWindowQtWidgets.QMainWindow: def u_init__self,父项=无: 超级主窗口,self.\u初始\u父窗口 url=。。。 突出显示\u dir=url+'\\突出显示' self.scrollArea=QtWidgets.qscrollaReawidGetResizeable=True self.setCentralWidgetself.scrollArea content\u widget=qtwidts.QWidget self.scrollArea.setWidgetcontent\u小部件 self.\u lay=qtwidts.QVBoxLayoutcontent\u小部件 self.files\u it=iter[os.path.joinhighlight\u dir,os.listdirhighlight\u dir中的文件对应文件] self._timer=QtCore.QTimerself,间隔=1 self.\u timer.timeout.connectself.on\u超时 自动启动 def on_timeoutself: 尝试: file=nextself.files\u它 pixmap=QtGui.qpixmap文件 self.add_pixmappixmap 除停止迭代外: 自动停止 def add_pixmapself,pixmap: 如果不是pixmap.isNull: label=qtwidts.QLabelpixmap=pixmap self.\u lay.addWidgetlabel 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 导入系统 app=qtwidts.QApplicationsys.argv w=主窗口 w、 展示 sys.exitapp.exec_