单击按钮更改 GIF
Click a button to change a GIF
在应用程序中有一个 QButton
和一个 QLabel
。在QLabel
里我放了一个QMovie
进去,显示一个GIF
。通过单击 QButton
我想更改 GIF
,该路径在 list
中定义。
问题:应用程序只显示第一个 GIF。按钮似乎不起作用。我做错了什么?
但是:请不要更改代码的结构。例如。我想在子函数中定义 QLabel
并从那里定义 QLabel
return
。
代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import random
list = ['F:\test1.gif', 'F:\test2.gif', 'F:\test3.gif', 'F:\test4.gif']
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.resize(600, 600)
self.initUI()
def initUI(self):
self.btn = QPushButton("change", self)
self.btn.clicked.connect(self.changeGIF)
self.grid = QVBoxLayout()
self.grid.addWidget(self.btn)
self.grid.addWidget(self.changeGIF())
self.grid.addStretch(1)
self.setLayout(self.grid)
def changeGIF(self):
randomValue = list[random.randint(1, len(list)-1)]
print(randomValue)
self.lbl = QLabel()
self.gif = QMovie(randomValue)
self.lbl.setMovie(self.gif)
self.gif.start()
return self.lbl
if __name__ == '__main__':
app = QApplication(sys.argv)
MyApp = Window()
MyApp.show()
sys.exit(app.exec_())
感谢您的帮助!
由于 QLabel
将负责以随机方式显示 GIF,建议创建一个只处理该任务的 class,在此小部件中,您必须有一个方法更改 QLabel
的 QMovie
。
list_of_gifs = ['F:\test1.gif', 'F:\test2.gif', 'F:\test3.gif', 'F:\test4.gif']
class GIFLabel(QLabel):
def __init__(self, gifs, *args, **kwargs):
QLabel.__init__(self, *args, **kwargs)
self.mGifs = gifs
self.changeGIF()
def changeGIF(self):
gif = random.choice(self.mGifs)
movie = QMovie(gif)
self.setMovie(movie)
movie.start()
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.resize(600, 600)
self.initUI()
def initUI(self):
self.btn = QPushButton("change", self)
self.label = GIFLabel(list_of_gifs, self)
self.btn.clicked.connect(self.label.changeGIF)
self.grid = QVBoxLayout(self)
self.grid.addWidget(self.btn)
self.grid.addWidget(self.label)
self.grid.addStretch(1)
if __name__ == '__main__':
app = QApplication(sys.argv)
MyApp = Window()
MyApp.show()
sys.exit(app.exec_())
在应用程序中有一个 QButton
和一个 QLabel
。在QLabel
里我放了一个QMovie
进去,显示一个GIF
。通过单击 QButton
我想更改 GIF
,该路径在 list
中定义。
问题:应用程序只显示第一个 GIF。按钮似乎不起作用。我做错了什么?
但是:请不要更改代码的结构。例如。我想在子函数中定义 QLabel
并从那里定义 QLabel
return
。
代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import random
list = ['F:\test1.gif', 'F:\test2.gif', 'F:\test3.gif', 'F:\test4.gif']
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.resize(600, 600)
self.initUI()
def initUI(self):
self.btn = QPushButton("change", self)
self.btn.clicked.connect(self.changeGIF)
self.grid = QVBoxLayout()
self.grid.addWidget(self.btn)
self.grid.addWidget(self.changeGIF())
self.grid.addStretch(1)
self.setLayout(self.grid)
def changeGIF(self):
randomValue = list[random.randint(1, len(list)-1)]
print(randomValue)
self.lbl = QLabel()
self.gif = QMovie(randomValue)
self.lbl.setMovie(self.gif)
self.gif.start()
return self.lbl
if __name__ == '__main__':
app = QApplication(sys.argv)
MyApp = Window()
MyApp.show()
sys.exit(app.exec_())
感谢您的帮助!
由于 QLabel
将负责以随机方式显示 GIF,建议创建一个只处理该任务的 class,在此小部件中,您必须有一个方法更改 QLabel
的 QMovie
。
list_of_gifs = ['F:\test1.gif', 'F:\test2.gif', 'F:\test3.gif', 'F:\test4.gif']
class GIFLabel(QLabel):
def __init__(self, gifs, *args, **kwargs):
QLabel.__init__(self, *args, **kwargs)
self.mGifs = gifs
self.changeGIF()
def changeGIF(self):
gif = random.choice(self.mGifs)
movie = QMovie(gif)
self.setMovie(movie)
movie.start()
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.resize(600, 600)
self.initUI()
def initUI(self):
self.btn = QPushButton("change", self)
self.label = GIFLabel(list_of_gifs, self)
self.btn.clicked.connect(self.label.changeGIF)
self.grid = QVBoxLayout(self)
self.grid.addWidget(self.btn)
self.grid.addWidget(self.label)
self.grid.addStretch(1)
if __name__ == '__main__':
app = QApplication(sys.argv)
MyApp = Window()
MyApp.show()
sys.exit(app.exec_())