Merhabalar, bu platformda yeniyim. Burayi kesfettigimde oldukca sevindim, cunku diger forumlara gore biraz daha aktif gozukuyor
Yasadigim problemden bahsedeyim, bir QMainWindow sinifim var. Icerisinde bir label ve bu label uzerinde de bir QMovie var. Ben hicbir sekilde bu QMovie nesnesinden yayilan sinyalleri yakalayamiyorum. Rica etsem bi’ bakar misiniz?
Kendi bilgisayarıma PySide2 kurmaya çalıştım ama ne yazık ki başaramadım. Ben de bunun üzerine sorunuzun cevabını PyQt5 kullanarak çözmeye çalıştım.
# name will be decided later
import sys
from PyQt5.QtGui import*
from PyQt5.QtCore import*
from PyQt5.QtWidgets import*
# from uiFile import Ui_MainWindow
class Main(QMainWindow):
def __init__(self):
super(Main, self).__init__()
# self.ui = Ui_MainWindow()
# self.ui.setupUi(self)
self.resize(800, 600)
self.userPhoto = QLabel(self)
self.userPhoto.setGeometry(250, 250, 500, 100)
self.movie = QMovie("femaleUser.gif")
self.userPhoto.setMovie(self.movie)
self.movie.started.connect(lambda: print('started'))
self.movie.finished.connect(lambda: print('finished'))
self.movie.start()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
Sorununuz şu, siz önce gif i oynatmaya başlamıssınız, daha sonra ise signal lere fonksiyon bağlamışsınız. Ama önce signaller bağlanmalı, daha sonra gif başlatılmalıydı.
Bu arada halledemediğim bir sorun var:
finished signali hala çalışmıyor, bu signali sadece self.movie.finished.emit() ile çalıştırabildim.
Yani özetle, sizin fonksiyon bağlamanızda sıkıntı yok, sıkıntı bağlama zamanının yanlış ayarlanması.
Eğer finished ile alakalı bir şey bulabilirsem buraya yazarım.
Tesekkur ederim vakit ayirdiginiz icin, belki de baska sekilde cozebiliriz. Sanirim direkt yapmak istedigim seyi anlatirsam istedigimiz seye daha hizli ulasacagiz.
Pencerenin ortasinda bir gif olacak, bu gif 10 saniyede 1 calismasi lazim. QMovie, bir kere start verilince durmuyor. Dogal olarak surekli oynatiyor gif’i. Bittigi anda yayilan sinyali yakalayabilirsem gif’i durduracaktim. QTimer ile de saniyeleri tutup sirasi geldiginde bir kere daha calistiracaktim. Belki de kurdugum mantik hatalidir
Hocam tekrar merhaba, şurada bir yöntemden bahsetmiş.
Bu yönteme göre
Pseudo:
def finish_gif():
if (self.movie.currentFrameCount == self.movie.frameCount - 1):
print("finished")
self.movie.frameChanged.connect(self.finish_gif)
gibi bir şey. Bana çok mantıklı geldi. Frame değiştiğinde o Frame in son Frame olup olmadığını kontrol etmek Ben maalesef yine deneyemiyorum ama bunu bir dener misiniz, deneyebildiğim zaman size geri dönüş yaparım.