wxpython - 更多組件
我寫到的這些組件可能一來不是很詳細,二來不是最全的,想要更好地用這些組件,應該還是去看看教程和別的示例。比較簡單的,推薦http://download.csdn.net/album/detail/459 辛星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事件,好像是說只要進度條沒有在往前讀,就會觸發。但是我覺得這個不是很科學,不知道拿它來干什么。
