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)
Her 'bütün' ayrıntılardan oluşur.Ayrıntılar içinde kaybolmamak için sizde kendi küçük bütünlüklerinizi oluşturun..
8 Ekim 2010 Cuma
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.
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
Ö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!
*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()
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ı
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
# -*- 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
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
Kaydol:
Kayıtlar (Atom)