Python 显示多个图像
我是PyQt4的新手,我试图在一个QScrollArea中显示图像,但我只显示了一个,而且总是最后一个图像。如何在QScrollArea中显示多个图像?有没有更好的方法来显示多个图像 这是我的密码: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)
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_