PyQt harikaları

Merhaba PyQt harikaları yazı dizimize hoş geldiniz, bu arada başlık iddialı olmuş biraz ama hak ediyor bence. Bu ara fırsat buldukça bir dizi halinde PyQt ile yapabileceğiniz “değişik” ve “işlevsel” şeylerden bahsedeceğim. İlki bu yazı, gelen tepkileri beğenirsem diğerlerini de yazarım, +rep’lerinizi bekliyorum :) Hemen senaryomuza geçelim. Bir resim gösterici uygulaması geliştiriyorsunuz ama uygulamanızın normal pencere şeklinde görünmesini istemiyorsunuz, formunuzun çerçeve şeklinde olmasını ve içinde resimlerinizin görünmesini istiyorsunuz. PyQt ile çok kolay. Pencerenizi herhangi bir çizim programıyla çizin ve gerisini PyQt’ye bırakın.

Örnek uygulamayı vermeden önce içeriğinden bahsedeyim, örneğimizde ana formumuz, kapatma ve minimize butonları ile ileri – geri butonlarını gösteren toplam 5 adet resim bulunmakta. Amacım pencere dekorasyonunu göstermek olduğu için resim gösterme kısmını yazmadım.

Anlatımı kodun içerisinde uygun yerlerde açıklama satırları ile yaptım. Kafanıza takılan, anlamadığınız bir kısım olursa sormaktan çekinmeyiniz.
Kodumuz şöyle:
Continue reading “PyQt harikaları”

PyQt & Animated Gif Macerası..

Python – PyQt birlikteliğinden swf oynatma yeteneği çıkmayınca geliştirdiğim uygulamada dinamik olarak güncellenebilen bir alanda animated gif oynatmaya karar verdik. Qt ile bunun oluru nedir diye baktığımda pek de zor olmadığını gördüm.

Özetle şöyle:
Önce bir QMovie nesnesi oluşturuyorsunuz, oynatacağınız gif’i QMovie nesnesini oluştururken belirtiyorsunuz. Daha sonra bir QLabel oluşturup setMovie metoduna oluşturduğunuz QMovie nesnesini veriyorsunuz. Son olarak oluşturduğunuz QMovie nesnesinin start() metodunu çağırarak gif’i oynatıyorsunuz. Mantık olarak çok basit olmakla birlikte bir türlü çalıştıramadım. Hata da vermiyor, bir derdi var belli, çok da küçük bişey ama bir türlü göremiyorum. Deneme için oluşturduğum kod aşağıda, oynatmaya çalıştığım gif dosyası da burada. Programı deneyip sonucu bana bildirirseniz çok sevinirim.

Çalıştığım sistem özellikleri:

Pardus 2008.2
PyQt 4.4.4

Cevap:
Aşağıdaki kodda bulunan movie nesnesini self‘e bağlayınca çalıştı. QMovie nesnesinin neden class’a bağlı global bir değişken olarak tanımlanması gerektiğini anlamış değilim. Bu örnek de böyle bir hatayla karşılaşanlar olursa diye dursun burada.

# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
 
class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
      MainWindow.setObjectName("MainWindow")
      MainWindow.resize(800, 600)
      self.centralwidget = QtGui.QWidget(MainWindow)
      self.centralwidget.setObjectName("centralwidget")
      self.label = QtGui.QLabel(self.centralwidget)
      self.label.setGeometry(QtCore.QRect(210, 90, 351, 231))
      movie = QtGui.QMovie("progress.gif")
      self.label.setMovie(movie)
      movie.start()
 
      """
 
      ** PyQt sürümünüzün gif destegi olup olmadigini commentleri kaldirarak gorebilirsiniz
 
      formats = QtGui.QImageReader.supportedImageFormats ()
      for i in formats:
         print i
 
      """
 
      self.label.setObjectName("label")
      MainWindow.setCentralWidget(self.centralwidget)
      self.menubar = QtGui.QMenuBar(MainWindow)
      self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 29))
      self.menubar.setObjectName("menubar")
      MainWindow.setMenuBar(self.menubar)
      self.statusbar = QtGui.QStatusBar(MainWindow)
      self.statusbar.setObjectName("statusbar")
      MainWindow.setStatusBar(self.statusbar)
 
      self.retranslateUi(MainWindow)
      QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
   def retranslateUi(self, MainWindow):
      MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
 
if __name__ == "__main__":
   app=QtGui.QApplication(sys.argv)
   window=QtGui.QMainWindow()
   ui=Ui_MainWindow()
   ui.setupUi(window)
   window.show()
   sys.exit(app.exec_())