Uygulamanın bir soketten veri okumasını sağlamaya çalışıyorum ama biraz zaman alıyor ve arabirimi kilitliyor, beklerken tk olaylarına nasıl yanıt verebilirim?Soket verisi beklenirken titrek olaylar nasıl oluşturulur?
5
A
cevap
9
Thats is easy! Ve hatta dişlere ihtiyacınız yok! Ancak, G/Ç kodunuzu biraz yeniden yapılandırmanız gerekecek. Tk, Xt’in XtAddInput() çağrısına eşdeğerdir; bu, bir dosya tanıtıcısında I/O mümkün olduğunda, Tk ana dizininden çağrılacak bir geri arama işlevini kaydetmenize olanak tanır. İşte gerekenler:
from Tkinter import tkinter
tkinter.createfilehandler(file, mask, callback)
dosya bir Python dosya veya soket nesnesi (aslında, bir fileno() metodu ile bir şey) ya da bir tamsayı dosya tanıtıcı olabilir. Maske sabitler tkinter biridir.READABLE veya tkinter.WRITABLE. aşağıdaki gibi geri arama denir: Eğer okuma için kullanılabilir kaç bayt seni tanımıyorum tarihi:
tkinter.deletefilehandler(file)
Not kullanarak bitince geri arama kaydı gerekir
callback(file, mask)
, Python dosya nesnesinin read veya readline yöntemlerini kullanamazsınız, çünkü bunlar önceden tanımlanmış bir bayt sayısını okumakta ısrar edecektir. Soketler için recv() veya recvfrom() yöntemleri iyi çalışır; Diğer dosyalar için,
os.read(file.fileno(), maxbytecount).
kullanın
Bu, Tk'nın gerçekten çok mükemmel özelliklerinden biridir - bir dosya okunurken bir olayın alınması soket işlemeyi çok kolaylaştırır. –