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ı”

Dosya ve dizin silme işlemi

Sitede bir arkadaşın sormuş olduğu soru üzerinden bu yazıyı eklemeye karar verdim, sorusuna da buradan bir cevap vermiş olurum. Vereceğimiz örnek dosya ve dizin silme işlemi ile ilgili olacak. Program fonksiyona gönderdiğimiz konumdaki (path) dosya ve dizinleri siliyor, her doysa/dizin silme işleminden sonra da bir ses dosyası çalıyor.

Kodumuz şöyle:

import os,audio,e32
sound_lock=e32.Ao_lock()

def sound_callback(onceki_durum,simdiki_durum,hata):
    if simdiki_durum==audio.EOpen:
        sound_lock.signal()

def ses_cal():
    sound=audio.Sound.open("z:\\Nokia\\Sounds\\Digital\\Alarm.mid")
    sound.play(callback=sound_callback)
    sound_lock.wait()
    sound.close()
   

def sil(path):
  for name in os.listdir(path):
     new=path+’\\’+name
     if os.path.isdir(new):
        sil(new)
        try:
            ses_cal()
            os.rmdir(new)
           
        except:
           pass
     else:
        try:
            ses_cal()
            os.remove(new)
           
        except:
           pass

sil("e:\\deneme")

Burada ses_cal() ve sound_callback() metodlarından bahsetmek istiyorum.

def ses_cal():
    sound=audio.Sound.open("z:\\Nokia\\Sounds\\Digital\\Alarm.mid")

sound değişkenine çalmak istediğimiz ses dosyasını atadık.

sound.play(callback=sound_callback)

sound nesnesini çalmaya başlattık ve sound nesnesinin play() metodun bir çağrılabilir fonksiyon (callback function – bildiğimiz fonksiyon ) atadık.

sound_lock.wait()
sound.close()

sound_lock adıyla oluşturduğumuz e32.Ao_lock() nesnesinin wait() metodunu çağırdık, bu metotla bir olay meydana gelmesini beklediğimizi belirttik. Daha sonra sound nesnemizi kapattık ve çalma işlemimiz sona ermiş oldu.

def sound_callback(onceki_durum,simdiki_durum,hata):

sound nesnesinin play() metoduna atadığımız fonksiyon 3 parametreyle çalışır. Burada onceki_durum,simdiki_durum ve hata (bunlar sadece değişken isimleri, istediğiniz ismi verebilirsiniz) değişkenleridir. Bizim bu programda ilgilendiğimiz simdiki_durum parametresine gelen değerdir.

if simdiki_durum==audio.EOpen:
    sound_lock.signal()

Bu if bloğunda simdiki_durum değişkenimize gelen değeri kontrol ediyoruz. Eğer değerimiz audio.EOpen ise, wait durumunda olan sound_lock nesnemize signal() metoduyla bir olay gerçekleştiğini belirten sinyali gönderiyoruz.

Peki değerimizin audion.EOpen olması ne demek?

Play metoduyla çaldığımız ses dosyasının çalınabilir, başlatılabilir durumda olduğunu gösterir bize. Bunun anlamı nedir? Bunun anlamı ses dosyamız bir kere çalmış ve bir daha çalmaya hazır demektir.

Şimdi toparlayacak olursak, yazdığımız metod şu işe yarıyor; ses_cal() metodunda sound_lock nesnesinin wait metodunu çağırarak bir olay beklemesini söyledik. sound.play kısmında ses dosyamız çalmaya başlar ve play metoduna atadığımız fonksiyon çalışır. Bu fonksiyonun çalışmasını anlatmıştık, eğer simdiki_durum audio.EOpen değilse sond_lock nesnesinin wait() metoduna bir sinyal gitmeyecek ve program play işlemi içerisinde kalacaktır, diğer kodlar işletilmeyecektir, taa ki ses dosyası bitene kadar. Ses dosyasının çalma işlemi bittiğinde sinyal gönderilecek ve program kaldığı yerden devam edecektir.

Yazdığımız programda her dosya/dizin silindiğinde ses dosyamızı çalıyoruz ve ses dosyamızın çalma işlemi bitene kadar diğer dosya/dinizini silmiyoruz.

Şimdilik bu kadar, kalın sağlıcakla…

05.02.08 tarihinde yapılan düzenleme:

Arkadaşın sorusu üzerine yolunu verdiğimiz konumda arama yapacak (örneğin c:\\) ve adını verdiğimiz dosyayı bulduğunda silecek, bulamadığında ise böyle bir dosya yoktur mesajı yazacak kodu ekliyorum.

import os
def ara_sil(konum,dosya):
    for root, dirs, files in os.walk(konum):
            for name in files:
                print root+" konumunda araniyor"
                if name==dosya:
                    print name+" dosyasi silindi"
                    os.remove(os.path.join(root, name))
                    return
    print dosya+ " dosyasi bulunamadi"
             
ara_sil("c:\\","yaziyazi.txt")

os.walk() fonksiyonu yolunu verdiğimiz konumdaki dosya/dizinler üzerinde gezinmemizi sağlıyor.
root: O anda içerisinde bulunduğunuz konumu tutuyor, string türünde bir değişkendir.
dirs: Bulunduğunuz konumdaki dizinleri tutuyor, liste türünde bir değişkendir.
files: Bulunduğunuz konumdaki dosyaları tutuyor, liste türünde bir değişkendir.

İşlevsel bir örnek olmakla beraber arkadaşın sorusuna yanıt olmuş değil maalesef. Örneği telefonumda denediğimde Python mobil sürümünün os.walk() fonksiyonunu desteklemediğini gördüm. Ancak diğer işletim sistemlerinde sorunsuz çalışıyor.

Mobil uygulamalarda arama yapmak için böyle bir fonksiyon var mı bilmiyorum. Sanırım bunun cevabını alabileceğiniz en iyi yer forum nokia.

Şimdilik bu kadar, kalın sağlıcakla…

PyS60 Kurulum

Mobil uygulama örneklerine geçmeden Python’u telefonumuza nasıl kuracağımızı anlatmakta fayda var diye düşündüm.

Öncelikle telefonunuzun hangi nesil olduğunu öğrenmeniz gerekiyor. Şu adresten öğrenebilirsiniz. Developer Platform başlığından telefonunuzun hangi nesil olduğunu ve özellik paketini öğrendikten sonra bu adresten python yourmlayıcısını ve yorumlayıcı arayüz dosyalarını indirmeniz gerekli.

Bir örnekle anlatırsak daha açıklayıcı olur diye düşünüyorum.
Telefonumun özellikleri: 2nd Edition Feature Pack 2 olsun.
İndireceğim dosyalar:
PythonForS60_1_4_1_2ndEdFP2.SIS
PythonScriptShell_1_4_1_2ndEdFP2.SIS

Bu dosyaları telefonunuza gönderip kurduktan sonra ana menünüze Python simgesinin yerleştiğini göreceksiniz.

Programı çalıştırdığınızda menüden Interactive Console‘u seçip etkileşimli yorumlayıcı ile python kodu yazabilirsiniz, daha önce kaydettiğiniz python kodlarını çalıştırmak istiyorsanız Run Python Script menü elemanını seçebilirsiniz.

Fırsat buldukça üzerinde çalıştığım örnek programları buradan sizlerle paylaşacağım.

Kalın sağlıcakla.