Я пишу графический интерфейс для отображения нескольких изображений (обложки книг из амазонки) из определенного списка URL-адресов, я смог загрузить их в панели успешно, но, несмотря на используя потоки, графический интерфейс, кажется, ждет, пока весь цикл не закончится, а затем все изображения появятся сразу, как я могу достичь графического интерфейса для отображения каждого изображения по мере того, как они выберут время выполнения. Графический интерфейс в основном заморожен до изображений взяты ... Спасибо!wxpython Threading отображает изображения по мере их загрузки
вопрос снова, чтобы убедиться, я получаю, чтобы отобразить каждое изображение на графическом интерфейсе, как они тянут и не все сразу ...
import wx
import os
import sys
import urllib2
import cStringIO
import threading
import time
urls = ['https://images-na.ssl-images-amazon.com/images/I/51-u3J3mtTL._AC_US100_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/51cRqX8DTgL._AC_US100_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/515iBchIIzL._AC_US100_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/511MaP7GeJL._AC_US100_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/51jizRmRYYL._AC_US160_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/51jizRmRYYL._AC_US160_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/31Pw7voGDFL._AC_US160_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/51g30m1xpPL._AC_US160_.jpg',
'https://images-na.ssl-images-amazon.com/images/I/51qx+6aQUnL._AC_US160_.jpg']
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.InitUI()
self.Ctrls()
self.makeButtons()
def makeButtons(self):
def _update_data(data):
time.sleep(2)
stream = cStringIO.StringIO(data)
bmp = wx.BitmapFromImage(wx.ImageFromStream(stream))
button = wx.Button(self.panel, -1, "Book cover", style=wx.ALIGN_CENTER, size=wx.Size(100,100))
button.SetToolTipString("wx.Button can how have an icon on the left, right,\n"
"above or below the label.")
button.SetBitmap(bmp,
wx.LEFT # Left is the default, the image can be on the other sides too
#wx.RIGHT
#wx.TOP
#wx.BOTTOM
)
button.SetBitmapMargins((4,4))
button.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False))
self.wrapSizer.Add(button, 1, wx.EXPAND)
self.Show(True)
self.panel.Layout()
def f():
f = urllib2.urlopen(url)
data = f.read()
wx.CallAfter(_update_data, data)
for url in urls:
threading.Thread(target=f).start()
def InitUI(self):
self.SetSize((800, 400))
self.SetTitle('Dynamically Flow Buttons to Next Row on Window-Resize')
self.Centre()
def Sizers(self):
self.wrapSizer = wx.WrapSizer()
self.panel.SetSizer(self.wrapSizer)
def Ctrls(self):
self.panel = wx.Panel(parent=self,pos=wx.Point(0,0), size=wx.Size(750,550), style=wx.TAB_TRAVERSAL)
self.Sizers()
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
О, спасибо за это, я многому учусь. Это результат, который я искал, поскольку я собираюсь выполнить сортировку после того, как он был извлечен. –
Я думал о очереди вместе с Threading, надеясь, что это породит несколько потоков, а затем Queue позаботится о заказе? Не уверен, что это произойдет, будет эквивалентно первому ответу, отправленному вами. –
Изменен код, чтобы показать, как сгенерировать кнопки вначале и применить растровое изображение позже. '' Queue'' вам не поможет, потому что, как и в первом примере, потоки будут обрабатываться последовательно, а не в одно и то же время. – nepix32