Python'da Tkinter ile bir istemci-sunucu programı yazıyorum. Bağlı müşterileri takip etmek için sunucuya ihtiyacım var. Bunun için istemcinin çıkış düğmesine (köşedeki standart "X") tıklandıktan sonra sunucuya otomatik bir mesaj göndermesini istiyorum. Kullanıcının programdan çıktığını nasıl bilebilirim?Tkinter "Çıkış" komutunu kesiyor musunuz?
cevap
Üst düzey pencerenin wm_protocol yöntemini kullanmak istiyorsunuz. Özellikle, WM_DELETE_WINDOW
protokolüyle ilgileniyorsunuz. Bu yöntemi kullanırsanız, pencere yok edildiğinde çağrılan bir geri arama kaydettirmenizi sağlar.
Kullanımı:
root.protocol("WM_DELETE_WINDOW", app.on_delete)
Bu yüzden bu satırı ekledim: root.protocol (root_project) ("WM_DELETE_WINDOW", app.on_delete()) "root.mainloop()' a çağrı yapmadan hemen önce ama on_delete (*) pencere açıldığında * açılır ve kapatıldığında değil. Yanlış bir şey mi yapıyorum? – John
@John: 'protokol' yöntemi bir işleve başvurur. Sondaki parantezin eklenmesiyle, 'app.on_delete' komutunu çağırırsınız ve bu yöntemin sonucunu protokol işleyicisine iletirsiniz. Doğru kullanım 'root.protocol (" WM_DELETE_WINDOW ", app.on_delete)' –
Mükemmel! Teşekkürler! – John
FWIW: Bu bir widget özgü davranış atamak da mümkündür.
Belirli bir pencere öğesi yok olduğunda bir eylemin gerçekleşmesini istiyorsanız, destroy() yöntemini geçersiz kılmayı düşünebilirsiniz. , Çerçeve 'f' 'b1' ve çocuk ile yok edilir 'b2' düğmesine basıldığında
class MyButton(Tkinter.Button):
def destroy(self):
print "Yo!"
Tkinter.Button.destroy(self)
root = Tkinter.Tk()
f = Tkinter.Frame(root)
b1 = MyButton(f, text="Do nothing")
b1.pack()
f.pack()
b2 = Tkinter.Button(root, text="f.destroy", command=f.destroy)
b2.pack()
root.mainloop()
: Aşağıdaki örneğe bakın "Yo!" yazdırılır.
Aynı cevabı this topic'da yayınladım. Benim durumumda
, aşağıdaki kod işe yaramadı:
root.protocol("WM_DELETE_WINDOW", app.on_delete) # doesn't work
Ancak, bu formu kullanarak çalıştı:
root.wm_protocol ("WM_DELETE_WINDOW", app.on_delete) # does work
'.protocol' kullanmak için söylenecek bir cevap yok, ancak ... kabul edilen cevap zaten' .wm_protocol' kullanmak için söylendi. – ArtOfWarfare
Python atexit
modülünü kullanabilirsiniz. Örneğin
:
import atexit
def doSomethingOnExit():
pass
atexit.register(doSomethingOnExit)
ait
Bu benim için mükemmel çalıştı. Diğerleri hiç tetiklenmedi. – ArtOfWarfare
- 1. Tkinter
- 2. Tkinter
- 3. Tkinter
- 4. Tuval içinde dairesel görüntü kesiyor
- 5. Bir daire içine UIImage kesiyor
- 6. Geçerli dosyaların üzerine yazmak için SVN çıkış komutunu zorla
- 7. Python Tkinter
- 8. Düzen Tkinter
- 9. Tkinter root.after_cancel
- 10. Python'ın Tkinter
- 11. URL'yi .htaccess aracılığıyla klasör yolunu kesiyor
- 12. Yerel ağlarının dışında bir veriyi kesiyor mu?
- 13. Bağımlılık olmadan SCons komutunu çalıştırma
- 14. "button" komutunu çağırdı: uygulama
- 15. SQL'den LINQ komutunu eklemek için
- 16. C programında Linux komutunu çalıştırın
- 17. Dockerfile - komutunu ayarlamak için ENV komutunu
- 18. RFT komutunu
- 19. yüklemek komutunu
- 20. "screen" komutuyla çıkış yönlendirmesi
- 21. Neden "10.0.2.2", "ifconfig" komutunu çalıştırıyordu?
- 22. Python Tkinter kök penceresinden nasıl kurtulurum?
- 23. python içindeki request.get komutunu nasıl durduracağım
- 24. Python Tkinter atma Tcl hatası
- 25. Tkinter Tuval hareket Bir Tkinter Tuval widget'ı sahip üst seviyeye
- 26. Dosya Açma (Tkinter)
- 27. Python Tkinter doğru telaffuz
- 28. Android çeviri için Tkinter
- 29. Python tkinter label orientation
- 30. , düzeltme gerekiyor Tkinter Hatası
olası yinelenen [? Ben Tkinter pencere yakın olayını işlemek nasıl] (http://stackoverflow.com/questions/111155/how-do-i-handle- window-close-event-in-tkinter) – nbro