Python 填充wx的最快方法。选择?
需要用数百个选项填充一个Python 填充wx的最快方法。选择?,python,wxpython,Python,Wxpython,需要用数百个选项填充一个wx.Choice,看起来只有一个方法可以实现这一点,那就是Append(): 我试着一次添加一个完整的列表,但它不起作用,所以有没有更好的方法呢?什么???你只要给它选择 choiceBox = wx.Choice(choices=aList, id = wx.ID_ANY, parent=self, pos=wx.Point(0, 289), size=wx.Size(190, 21), st
wx.Choice
,看起来只有一个方法可以实现这一点,那就是Append()
:
我试着一次添加一个完整的列表,但它不起作用,所以有没有更好的方法呢?什么???你只要给它选择
choiceBox = wx.Choice(choices=aList, id = wx.ID_ANY, parent=self, pos=wx.Point(0, 289),
size=wx.Size(190, 21), style=0)
您也可以稍后使用
choicebox.SetItems(aList)
下面是一个简单的示例,其中生成选择需要很长时间,但我们使用线程来不阻塞ui
import wx
import threading
import time
import random
def make_choices():
choices = []
for _ in range(80):
choices.append(str(random.randint(0,1000000)))
time.sleep(0.1)
print "Making choice List!"
return choices
def make_choice_thread(wxChoice,choice_fn):
wx.CallAfter(wxChoice.SetItems,choice_fn())
wx.CallAfter(wxChoice.SetSelection,0)
a = wx.App(redirect=False)
fr = wx.Frame(None,-1,"A Big Choice...")
st = wx.StaticText(fr,-1,"For Some reason you must pick from a large list")
ch = wx.Choice(fr,-1,choices=["Loading...please wait!"],size=(200,-1),pos=(15,15))
ch.SetSelection(0)
t = threading.Thread(target=make_choice_thread,args=(ch,make_choices))
t.start()
fr.Show()
a.MainLoop()
什么???你只要给它选择
choiceBox = wx.Choice(choices=aList, id = wx.ID_ANY, parent=self, pos=wx.Point(0, 289),
size=wx.Size(190, 21), style=0)
您也可以稍后使用
choicebox.SetItems(aList)
下面是一个简单的示例,其中生成选择需要很长时间,但我们使用线程来不阻塞ui
import wx
import threading
import time
import random
def make_choices():
choices = []
for _ in range(80):
choices.append(str(random.randint(0,1000000)))
time.sleep(0.1)
print "Making choice List!"
return choices
def make_choice_thread(wxChoice,choice_fn):
wx.CallAfter(wxChoice.SetItems,choice_fn())
wx.CallAfter(wxChoice.SetSelection,0)
a = wx.App(redirect=False)
fr = wx.Frame(None,-1,"A Big Choice...")
st = wx.StaticText(fr,-1,"For Some reason you must pick from a large list")
ch = wx.Choice(fr,-1,choices=["Loading...please wait!"],size=(200,-1),pos=(15,15))
ch.SetSelection(0)
t = threading.Thread(target=make_choice_thread,args=(ch,make_choices))
t.start()
fr.Show()
a.MainLoop()
oops修复了
SetItems
谢谢,伙计,我不知道这项工作有SetItems
,但遗憾的是,它似乎一点也不快,Append
和SetItems
都花了大约2秒的时间来填充choiceBox
1800项,所以我想没有更好的选择来加速这一进程了?这听起来是个坏主意。哪个用户希望在网格或listctrl之外的1800个项目中滚动?不多。您可以尝试使用ComboBox或ComboCtrl,但可能需要重新考虑一下您的UI。将listctrl填充代码放在一个线程中。至少这不会妨碍你的工作GUI@user2963623这是真的,但他需要知道如何进行GUI线程(即只有主线程可以更新GUI)oops修复了SetItems
谢谢,伙计,我不知道有SetItems
可以做这项工作,但遗憾的是,它似乎一点也不快,Append
和SetItems
都花了大约2秒钟的时间来填充choiceBox
中的1800个项目,所以我想没有更好的选择来加快速度了?这听起来是个坏主意。哪个用户希望在网格或listctrl之外的1800个项目中滚动?不多。您可以尝试使用ComboBox或ComboCtrl,但可能需要重新考虑一下您的UI。将listctrl填充代码放在一个线程中。至少这不会妨碍你的工作GUI@user2963623没错,但他需要知道如何进行GUI线程(即只有主线程才能更新GUI)