wxpython - 更多组件
我写到的这些组件可能一来不是很详细,二来不是最全的,想要更好地用这些组件,应该还是去看看教程和别的示例。比较简单的,推荐 辛星wpython教程
■ 复选框 CheckBox
复选框需要对每个单独的选项构建,常用的构造方法是:CheckBox(parent,id,label,pos,size)
事件中的EVT_CHECKBOX是指被Bind的checkbox被勾选或取消时发生的事件
CheckBox常用的类方法有:
IsChecked() 返回True或者False
Set/GetValue() 设置/获取状态,也是True或者False
Set/GetLabel() 设置/获取复选框的文本
■ 单选框 RadioButton
构造方法:RadioButton(parent,id,label,pos,size,style=RB_GROUP或者None)
单选框的构造方法和复选框是类似的,但是有一个style,其作用是用来分组。一个单选框组里面可以有若干个单选框,但是一个组只能有一个单选框被选中。令style=wx.RB_GROUP来使得这个单选框成为一个新的组的第一个成员,以后构建的成员也默认全部都是这个组的成员直到有一个新的单选框又开了一个RB_GROUP。
EVT_RADIOBUTTON指被Bind的RadioButton被选中时发生的事件
RadioButton常用的类方法和复选框是类似的:
Set/GetValue() 值也是True/False
Set/GetLabel()
■ 进阶单选框 RadioBox
当选项比较多时,一个个加RadioButton有点繁琐,于是可以用RadioBox来构造。另外,从外观上来说,RadioBox会在所有选项的外围加一条细线把不同组的选项给分割开。另外RBox也有一些统一管理选项的方法,比较方便。
构造方法:RadioBox(parent,id,label,pos,size,list,N,RA_SPECIFY_ROWS/RA_SPECIFY_COLS)。其他都是差不多的,主要是几点,label的指的是写在框框上面的文字而不是选项的文字,list给出了所有选项的文字,N是一个自然数,配合后面的参数是ROWS还是COLS来指出这个RBox有几行和几列。
和其他组件不太一样的是,上述参数中,pos和size是必须的,否则会报错,另外ROWS和COLS选一个写就好了,程序会按照指出的行数或列数自动来调整另一个。size指的是框框的大小,并不受到有多少选项的影响。
稍微有点复杂,就展示一个实例:
class MyFrame(Frame):
def __init__(self,pos,size):
Frame.__init__(self,None,-1,pos=pos,size=size)
totalPanel = Panel(self,-1)
totalSizer = BoxSizer(VERTICAL)
oneSizer = BoxSizer(HORIZONTAL)
self.rb = RadioBox(totalPanel,-1,"RadioBox",(0,0),(200,100),["choiceA","choiceB","choiceC","choiceD"],2,RA_SPECIFY_ROWS)
oneSizer.Add(self.rb)
totalSizer.Add(oneSizer,flag=ALIGN_CENTER)
totalPanel.SetSizer(totalSizer)
def test(self,event):
print self.radio1.IsEnabled()
if __name__ == '__main__':
app = App()
myFrame = MyFrame((200,200),(300,300))
myFrame.Show()
app.MainLoop()
界面:
EVT_RADIOBOX是RadioBox的事件,指的是当Box中有任意一选项被选中的事件。
其类方法也很丰富:
GetCount() 返回框中选项的总数
Get/SetItemLabel(n) 返回/设置给出的初始化列表中索引为n的那项的label
FindString(...) 返回相关Label的选项的索引,若没找到相关string就返回-1
GetSelection() 返回选中项的索引
SetSelection(n) 使索引为n的选项被选中
GetStringSelection() 返回选中项的Label
EnableItem(n,flag) 使得索引为n的选项失效或有效,flag是True/False
■ 下拉选项
下拉选项也是比较常用的一个组件,构造方法:Choice(parent,id,pos,size,choices)。和RBox一样,pos和size也是必须的,list提供了选项做成的列表。
类方法也有GetStringSelection(),GetSelection(),GetCount()等等,就不再重复说了。总之脑补一下就好
*SetItems(list) 可以直接更新下拉列表的选项,原理是先调用Clear()方法清空当前选项,然后再调用AppendItems(list)方法载入新选项列表。
*Append(string),AppendItems(list),Insert(string,index)等等方法用于增加选项,更多详细信息可以进python shell去help(wx.Choice)一下看
■ 其他选择结构还有列表框ListBox,复选列表框CheckListBox等等,不多说了,想用可以查教程
■ 进度条
用Gauge可以在wx中加入进度条。常见构造方法:Gauge(parent,id,range=100,pos,size,style=GA_HORIZONTAL)
range是指进度条加载满时指定的一个终点值,程序将根据这个值来确认当前进度条应该有多满。style指定了加载的方式是横向加载还是竖向加载,竖直加载的话要GA_VERTICAL
和其他一些组件不同的是,单单把进度条构造出来放在窗口里还是不够的,这样的进度条是静态的。应该把进度条和某个过程结合起来,通过SetValue(..)方法来更新进度条的加载情况。比如下面这个实例
count = 0
while count<=100:
self.gauge.SetValue(count)
count += 1
time.sleep(0.1)
运行到上面这段语句的时候,会每隔0.1秒更新百分之一的进度条,所以10秒之后进度条能读完。
精度条还有一个EVT_IDLE事件,好像是说只要进度条没有在往前读,就会触发。但是我觉得这个不是很科学,不知道拿它来干什么。