pyqt5での画像の表示が思うようにいかない
python3.5を使っています。pyqt5で複数の画像をドラッグ&ドロップドロップした時にそれらの画像を下図のように表示するGUIを作りたいです。
以下は実際に書いてみたコードです
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtGui,QtCore, QtWidgets
myLabel = None
class Button(QPushButton):
def __init__(self, title, parent):
super().__init__(title, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
mimeData = e.mimeData()
# パスの有無で判定
if mimeData.hasUrls():
e.accept()
else:
e.ignore()
def dropEvent(self, e):
# ファイルから画像読込
urls = e.mimeData().urls()
path = urls[0].toLocalFile()
urllength=len(urls)
imagelist=[]
for file in range(0,urllength):
imagelist.append(urls[file].toLocalFile())
print(imagelist)
myLabel.setIcon(QIcon(path))
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.list1=["グリーングリーン.jpg"]
global imagelist
imagelist=self.list1
self.listlength=len(imagelist)
self.imagenumber=0
iconimage=self.list1[self.imagenumber]
self.button = Button("",self)
self.button.resize(400,300)
self.button.setIcon(QIcon(iconimage))
self.button.setIconSize(QSize(400,300))
self.button.move(50, 50)
self.btnright=QPushButton(self)
self.btnright.resize(40,40)
self.btnright.setIcon(self.style().standardIcon(getattr(QStyle,"SP_ArrowRight")))
self.btnright.setToolTip('次の画像')
self.btnright.setIconSize(QSize(40, 40))
self.btnright.move(460, 200)
self.btnright.clicked.connect(self.stepnext)
self.btnleft=QPushButton(self)
self.btnleft.resize(40,40)
self.btnleft.setIcon(self.style().standardIcon(getattr(QStyle,"SP_ArrowLeft")))
self.btnleft.setToolTip('前の画像')
self.btnleft.setIconSize(QSize(40, 40))
self.btnleft.move(5, 200)
self.btnleft.clicked.connect(self.stepprev)
global myLabel
myLabel = self.button
#global imnum
#imnum=self.imagenumber
self.setWindowTitle('Simple drag & drop')
self.setGeometry(300, 300, 500, 500)
def stepnext(self):
print(imagelist)
if self.imagenumber<self.listlength-1:
print(imagelist)
self.imagenumber=self.imagenumber+1
myLabel.setIcon(QIcon(imagelist[self.imagenumber]))
else:
pass
def stepprev(self):
if self.imagenumber>0:
self.imagenumber=self.imagenumber-1
myLabel.setIcon(QIcon(imagelist[self.imagenumber]))
else:
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
しかし、矢印を押しても画像が次の画像に移りません。Buttonクラス内でのimagelistの変更がExampleクラス内でのimagelistに反映されてないのが原因だと思うのですがどう直せばいいのかが分かりません。