在wxpython中可以将列表“设置”为ComboBox吗?
你好,我知道用列表可以做到这个,不过用下拉框(ComboBox)能做到吗?有没有类似于“set”这个功能的东西?
我试着在下拉框上用“set”,但出现了这个错误:
AttributeError: 'ComboBox'对象没有'设置'这个属性。
谢谢。
3 个回答
1
http://www.wxpython.org/docs/api/wx.ComboBox-class.html
__init__(parent, id, value, pos, size, choices, style, validator, name)
combobox = wx.ComboBox(self, choices=myList)
这段内容是关于一个叫做ComboBox的控件的初始化方法。ComboBox可以理解为一个下拉框,用户可以从中选择一个选项。
在这个方法中,有几个参数需要注意:
- parent:这个是ComboBox的父级控件,简单来说,就是它放在哪里的那个地方。
- id:这是给ComboBox一个唯一的标识符,用来区分不同的ComboBox。
- value:这是ComboBox一开始显示的内容,也就是默认选中的选项。
- pos:这个是ComboBox在界面上的位置,告诉它应该放在哪个地方。
- size:这个是ComboBox的大小,决定它的宽度和高度。
- choices:这是一个选项列表,里面包含了用户可以选择的所有选项。
- style:这个是ComboBox的样式,决定它的外观,比如是否可以编辑等。
- validator:这个是用来验证用户输入的内容,确保输入是有效的。
- name:这是ComboBox的名字,可以用来在代码中引用它。
总的来说,这个方法就是用来创建一个下拉框,并设置它的一些基本属性和行为。
1
我觉得你是在问怎么在“运行时”添加新的项目?也就是说,在表单创建之后?如果是这样的话,看看下面的代码吧;-)
def UpdateCitiesCombo(self):
self.cmbCities.Clear()
pc = PostalCode()
if self.txtPostalCode.Value:
cities = pc.GetFromCode(int(self.txtPostalCode.Value))
for city in cities:
self.cmbCities.Append(city[2])
items = self.cmbCities.GetItems()
index = -1
try:
if self.customer.city != "":
index = items.index(self.customer.city)
else:
index = 0
self.cmbCities.SetSelection(index)
except ValueError:
self.cmbCities.SetValue(self.customer.city)
简单来说,你需要注意的是ComboBox的Clear()和Append()这两个方法,还有这个函数是从某个事件中调用的。希望这正是你想要的。
6
你可以用 SetItems(myList) 这个方法把一个列表放进下拉框(ComboBox)里,这样会把原来的内容覆盖掉。
补充一下:在下拉框里创建列表的最常见方法是这样的:
myList = ["dog", "cat", "hamster"]
cbo = wx.ComboBox(self, choices=myList)
不过,因为下拉框是从 ItemContainer 这个类继承来的,所以你也可以用下面这个完整的例子来实现:
import wx
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Test")
panel = wx.Panel(self)
myList = ["dog", "cat", "hamster"]
cbo = wx.ComboBox(panel)
cbo.SetItems(myList)
self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()