8 Ekim 2010 Cuma

invalid path name - Geçersiz yer adı.

Bu hata genelde Tkinter arayüz kullanılan uygulamalarda alt öğe (sub) bileşeninden üst(main) öğe bileşenin içindeki bir yada bir kaç öğenin çağrılması yada nitelik atanmasından kaynaklanır. Görsel bileşenleriniz bir Class içinde değilse o bileşene ulaşıp yok edemez yada nitelik değiştiremezsiniz.Şayet Class yazmadan bu problemi bertaraf etmek isterseniz 'global' komutunu kullanabilirsiniz.Global komutu ilişkilendirilecek öğe (veya değişken) tanımından önce olmalıdır.

global deneme
deneme=Button(govde, bg='blue',fg='white', text='deneme')
deneme.pack()

#Burada 'govde' bu butonun tabi olacağı gövde adıdır.(bg=artalan rengi, fg=yazı rengi, text=buton metni, pack bir gösterim modudur ve nicelik gerektirmeden de kullanılabilir. Ayrıca bakınız place, grid vb)

Quick For-Hızlı for

Sadece öğeler için bir for döngüsü kullanmak isterseniz. Yeni listeniz tek komutla hazır! Bu örnekde 'listem1' öğesi
daha önceden oluşturulan bir dosya sürecidir.Python da değişkenler (tanımsız) özgürdür yani istediğiniz zaman istediğiniz biçime dönüştürebilirsiniz.Aynı adlı değişken bazen liste bazen tüp ve sözlük olduğu gibi bazende sayı veya yazı olabilir. Bir çok değişken adı tanımlayıp kafanız karışacağına en azından sadece uygulama boyunca bir sefer çalışacak koda farklı isimler koymak pek akıllıca sayılmaz.

listem1 = [liste.rstrip() for liste in listem1]

#Buradaki 'rstrip' kullanılan readlines komutunun bir zorunluluğudur kısaca anlatmak gerekirse listeye işlenecek satırlardaki 'enter' karakterlerini siler.

4 Ekim 2010 Pazartesi

IP numaranızı öğrenme

Aslında IP numaranızı heryerden öğrenebilirsiniz fakat burada  'urllib' in ne işe yaradığına örnektir.
Önemli Uyarı:Bazı web sayfaları kullanıcı kimliği (ki taleplerde 'header' olarak geçer ) olmayan talepleri yanıtsız brakır.Bu durum ziyaretçinin istenmeyen işletim sistemiyle sayfaya bağlanmasında da söz konusudur.Az bir karakter kod ilavesiyle bunlar aşılabilir(Ne güvenlik ama! Bence tutuculuk yada yobazlık olabilir...)
import urllib2

cann= urllib2.urlopen('http://canyouseeme.org/')  # IP adres bilgisi verip
                                                      #içeriği dinamik olmaya bir site...
kipim=cann.read()      #Sadece yazıları okur resimler veya medyalar  link olarak gözükür
nah=kipim.find('Your IP:') # IP bilgisinin referans(bulma)
                                         #noktasını bulma(Sayı olarak dönecektir(Integer))
hamip=kipim[nah:(nah+50)] #Referans notasından 50 karakter ilersine kadar
                                             #olan parça gerekli.(IP no uzunluğu 15 karakter)
del urllib2 #işe yaramayan kütüphaneyi silebileceğimize dair örnek (o:
ipim=hamip[((hamip.find('<td><b>'))+7):(hamip.find('</b></td>'))] #Html kodlarının
                      #hangi aralığındaysa o detayları giriyoruz.(tablo başladı,kalın yazma,'IP
                       #numaramız',kalın yazma bitti,tablo sonu)
                       #Neden +7 : print  len('<td><b>')
print ipim

Killprocces-uygulama sonlandırma

Bir kaç Tkinter ilavesiyle win32 işlemlerini sonlandırabilirsiniz.
*Ben win32'yi çoook seviyorum diyorsanız! Başlat>Çalıştır>taskkill /PID "PID NO"
  Bu PID listesine ulaşmak isterseniz Başlat>Çalıştır>tasklist
import win32api
import os

pid=3156 #Domuzluk yapan yanıt vermiyen windows uygulamasının işlem numarası
def yoket(pid):  #bu numarayı görev yöneticisinden Görünüm>Sütun seç>
                                     #PID(İşlem tanımlayıcı) aktif ederek görebilirsiniz
  yordam = win32api.OpenProcess(1, 0, pid) #İşlemin adreslenmesi
  return (0 != win32api.TerminateProcess(yordam, 0)) #Şayet o işlem aktifse kapatabilirsiniz
yoket(pid)                                               #Varolmayan bir şeyi yokedemezsiniz!
                                                 #Tkinter uygulamalarında sık görülen hata!

Gmailden direkt mail yollama

İnternet sitesine girmeden mail gönderme(smtp hesap gereklidir!)import smtplib

from_name = "Sado" #gönderen bölümündeki görünen isim
to = "Sado PY" #alıcı bölümündeki görünen isim
subject = "Well Come" #Konu bölümünde olacak metin

headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (from_name, to, subject)
msg = headers + "Türk python gurubuna hoşgeldiniz.Saygılar"#Mesaj bölümü

mailserver = smtplib.SMTP("smtp.gmail.com", 587) #smtp server için host, port ayarı
mailserver.ehlo()
mailserver.starttls()#oturum açma
mailserver.ehlo()
mailserver.login("gönderenin hesabı@gmail.com", "gönderenin şifresi")
mailserver.sendmail("gönderenin hesabı@gmail.com", "alıcının adresi@alıcı.com", msg)
mailserver.close()

Mause kanca - rapor olayı

Mausu dinamik yada statik bilgi dizesinden faydalanarak belirli bir koordinata yollama:

import win32api

xy=['20, 758','1000,768']#gidilecek konum pixel ölçüler

for har in xy:
  harxy=har.split(',')#deseni parçalama
  x=harxy[0]
  y=harxy[1]
  e=win32api.SetCursorPos((int(x),int(y))) #konuma gönderme
  g=win32api.GetCursorPos() #konum bilgilerinin alınması

win32 hata kodlarından faydalanma

yazdığınız programda hata kodlarını bedavaya getirmek istiyorsanız sistem hata kodlarıyla sizin hata kodlarınız aynı ise bu metodla hata kodu (error strings) çıktısı alabilirsiniz:

# -*- coding: windows-1254 -*-
import pythoncom

hata_listesi=[]
for i in range(0,500): # aralık döngüsü başlangıç sıfır bitiş beşyüz artım adımı yazılmadığı için
  a=pythoncom.GetScodeString(int(i))                                          #varsayılan değer bir dir.
  z=a.decode('windows-1254') #türkçe harflerin düzeltilmesi
  b=str(i)+ ".Uyarı :"
  k=(b+a).decode('windows-1254')
  hata_listesi.append(k) #hata listesine eleman eklenmesi
  if i == 499 : #sonucu tekrar win32 hatalarından vermek isterseniz
    print pythoncom.GetScodeString(int(0)) #işlem başarıyla gerçekleşdi

#print hata_listesi #hata listesini tek satırda çıkartır

#listenin her bir elemanı tek satırda görmek için:
for i in hata_listesi:
   print i

basit bir zamanlayıcı

basit bir zamanlayıcı her nekadar 'timeit' modülü olsada öğrenmek maksadıyla hiç bir kodu hazır kullanmayın çünkü python bir betik dilidir.Şayet bu uygulamayı saniye değeri sıfır iken çalıştırırsanız sonsuz döngüye geçiş yapmış olacaksanız. Bunun sebebini siz bulacaksınız.Ayrıca '==' yerine '!=' kullandık bunun sebebi ise nelerden hoşlandığımızı söylemek yerine nelerden hoşlanmadığımızı söylemek daha kısa bir konuşma yapmamızı sağlar.
import time

zaman=time.time()
vakit=time.localtime(zaman)
d=vakit[5] #Vakit değişkeninden saniye bölümünün alınması
kontrol='devam' #Çevrim kontrolü için değişken oluşturma

while kontrol != 'dur': #Çevrimin hangi durumda aktif olacağını belirtme
    while ((time.localtime(time.time()))[5] ) == (int(d)-1): #zamanın kontrol edilmesi
       print "Bak ömründen 1 dakka gecti sen hala aynı noktadasın!"
       kontrol='dur'#Değişken içeriğini değiştirme