2016-04-05 15 views
0

Kullanıcının bir düğmeyi tıklattığı ve bir web sitesinden bazı verileri indirmek için bir işlem başlattığı bazı python PyQT kodları var. Bu süre boyunca liste penceresinde "lütfen bekleyin" demek için bir mesajın görünmesini istiyorum, böylece bir şeyler olduğunu biliyorlar.PyQT liste görünümü penceresindeki mesajların zamanlaması, bir işlev çalışmadan önce gerçekleşecek mi?

Ancak zamanlama kapalıdır ve işlem bittikten sonra ileti işlendikten sonra mesaj durumu için kod eklediyse de, işlevin başlatılması için sınıf işlevinin başlangıcında işlemi başlatmak için tıklayın. Bu aldığım kod kısa versiyonu:

self.statusfeed.addItem("Please Wait....Updating database from the web") 
update_db() 
self.statusfeed.addItem("Database updated") 

fonksiyon update_db() indirmeyi çalışır.

for filename, weblink in web_links: 
    netfile = urllib2.urlopen(weblink) 
    out_fp = open(os.path.join(root, filename), 'w') 
    out_fp.write(netfile.read()) 
    out_fp.close 

lütfen bekleyin durum indirme yapılır sonrasına kadar güncellenmiyorsa Ancak:

Bu dosyaları almak için weblinks bir dictonary dışındaki güncelleme fonksiyonunun ana parçasıdır. Durumu yukarıda gösterdiğim sıraya göre bekleyip güncellemek için nasıl zorlayabilirim?

+0

"update_db()" işlevine daha fazla ayrıntı (kod) vermeniz gerekeceğini düşünüyorum. Aslında dediğin gibi arka planda koşuyor gibi görünmüyor, ama belki de bu tasarım mı? Update_db() 'işlevi bir iş parçacığı veya işlem başlatır ve tamamlanana kadar geri dönmez mi? [Bu] (http://stackoverflow.com/a/29917237/1994235) yanıtı, iletilerin neden beklenmedik zamanlarda göründüğünü açıklar. –

+0

Tamamen update_db() işlevi yedi web dosyasında yedi dosyayı açmak için urllib2'yi kullanır ve dosyalar yerel bir dizine yazılır. –

+0

Ben iş parçacığı vb ile tam bir noob var, bu yüzden benimle orada yavaş gitmek zorunda kalacaksınız ... –

cevap

1

update_db() numaralı çağrıdan önce QtGui.qApp.processEvents()'u ekleyin. Bu, UI'nin beklemedeki olaylara göre kendisini güncellemesini sağlayacaktır.

+0

Brilliant Kocamla bugün bunun hakkında sohbet ediyordum ve o işlevin önünde çalıştırılabilen bir çeşit GUI güncelleme işlemi olması gerektiğini düşündü. Ben pyqt çok yeni ve sadece ne yapabilirim yüzeyine çizik teşekkürler! –