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)