亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

實戰(zhàn)wxPython/ target=_blank class=infotextkey>Python系列-039

 

wxPythontigo提供了一些高級控件。例如,樹形控件、html窗口、網(wǎng)格控件、列表控件、或具有高級樣式功能的編輯器等。

一、wx.ListBox列表框

wx.ListBox列表框控件從一個字符串列表中選擇一個或者多個字符串。所選字符串顯示在一個可以滾動的列表框中,所選中的字符串將特別標(biāo)記。列表框可以是單選 (如果選擇了其中的一個項,則清除先前的選擇項)或者多重選擇(選擇一個項的時,不影響對其他項的選擇)。

列表框元素從0開始編號,雖然元素的最大數(shù)量是無限的,但通常最好使用虛擬控件,不需要一次性將所有項添加到其中。由于這個控件沒有做優(yōu)化,比如在wx.dataview.DataViewCtrl或者使用LC_VIRTUAL樣式的wx.ListCtrl時,需要加載超過上百的項時,性能會有所影響。

注意,列表框不支持除制表符以外的控制字符。

wx.ListBox支持的窗口樣式:

  • wx.LB_SINGLE:單選列表。
  • wx.LB_MULTIPLE:多選列表。
  • wx.LB_EXTENDED:擴(kuò)展選擇列表:用戶可以使用SHIFT或CTRL鍵以及光標(biāo)移動鍵或鼠標(biāo)來擴(kuò)展選擇。
  • wx.LB_HSCROLL:如果內(nèi)容太多,創(chuàng)建水平滾動條(僅限windows)。
  • wx.LB_ALWAYS_SB:始終顯示垂直滾動條。
  • wx.LB_NEEDED_SB:只在需要時創(chuàng)建垂直滾動條。
  • wx.LB_NO_SB:不創(chuàng)建垂直滾動條(僅限于wxMSW和wxGTK)。
  • wx.LB_SORT:列表框內(nèi)容按字母順序排序。

注意:LB_SINGLE, LB_MULTIPLE和LB_EXTENDED樣式是互斥的,最多可以指定其中一個樣式(單選是默認(rèn)設(shè)置)。

wx.ListBox發(fā)出的事件:

  • EVT_LISTBOX:當(dāng)列表中的項被選中或選擇發(fā)生變化時,處理wx.EVT_LISTBOX事件。
  • EVT_LISTBOX_DCLICK:當(dāng)雙擊列表框時,處理wx.EVT_LISTBOX_DCLICK事件。

wx.ListBox常用方法

  • Deselect(selfn):取消選擇列表框中的項(只適用于多選擇列表框)。
  • EnsureVisible(selfn):確保當(dāng)前顯示具有給定索引的項。這個方法只在必要時滾動列表框,如果這個項已經(jīng)顯示,它不會做任何事情。
  • FindString(selfstringcaseSensitive=False):查找與給定字符串匹配的項。
  • GetCount(self):返回控件中的項數(shù)。
  • GetCountPerPage(self):返回可以放入列表框垂直可見區(qū)域的項數(shù)量。如果無法確定每頁的條目數(shù),則返回-1。
  • GetSelection(self):返回所選項的索引,如果沒有選擇項,則返回NOT_FOUND。
  • GetSelections(self):用當(dāng)前選定項的位置填充整數(shù)數(shù)組
  • GetString(selfn):返回具有給定索引的項的標(biāo)簽。索引必須是有效的,即小于GetCount返回的值,否則會觸發(fā)斷言。值得注意的是,如果控件為空,則不能調(diào)用此函數(shù)。
  • GetTopItem(self):返回最上面可見項的索引。如果該方法沒有為當(dāng)前平臺實現(xiàn),則返回NOT_FOUND。
  • HitTest (self, point):返回位于point上的項,如果沒有項位于point上,則返回NOT_FOUND。
  • InsertItems(selfitemspos):在指定位置之前插入給定數(shù)量的字符串。
  • IsSelected(selfn):確定是否選擇某項。
  • IsSorted(self):如果列表框為LB_SORT樣式,則返回True。此方法主要僅用于內(nèi)部使用。
  • SetFirstItem (self, string):將指定的項設(shè)置為第一個可見項。
  • SetItemBackgroundColour(selfitemc):如果wx.LB_OWNERDRAW標(biāo)志被設(shè)置,在列表框中設(shè)置一個項的背景顏色(僅對MSW有效)。
  • SetItemFont(selfitemf):如果wx.LB_OWNERDRAW標(biāo)志被設(shè)置,在列表框中設(shè)置一個項的前景顏色(僅對MSW有效)。
  • SetSelection(selfn):將選定項設(shè)置為給定項n,如果n == NOT_FOUND則完全刪除選定項。注意,這不會觸發(fā)任何命令事件,也不會取消控件中支持多個選擇的任何其他項。
  • SetString(selfnstring):為給定的項設(shè)置標(biāo)簽。

圖1:wx.ListBox類繼承關(guān)系

二、wx.ListBox演示

#列表框(wx.ListBox)

import wx

class SampleListBox(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleListBox, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #設(shè)置標(biāo)題
        self.SetTitle("實戰(zhàn)wxPython: ListBox演示")
        #設(shè)置窗口尺寸
        self.SetSize(400, 240)

        panel = wx.Panel(self)

        #水平布局
        hbox = wx.BoxSizer(wx.HORIZONTAL)

        # 添加一個列表框
        self.listbox = wx.ListBox(panel)
        hbox.Add(self.listbox, wx.ID_ANY, wx.EXPAND | wx.ALL, 20)

        # 按鈕面板
        btnPanel = wx.Panel(panel)
        vbox = wx.BoxSizer(wx.VERTICAL)
        newButon = wx.Button(btnPanel, wx.ID_ANY, "新建", size = (90, 30))
        renButton = wx.Button(btnPanel, wx.ID_ANY, "重命名", size = (90, 30))
        delButton = wx.Button(btnPanel, wx.ID_ANY, "刪除", size = (90, 30))
        clrButton = wx.Button(btnPanel, wx.ID_ANY, "清理", size = (90, 30))

        newButon.Bind(wx.EVT_BUTTON, self.NewItem)
        renButton.Bind(wx.EVT_BUTTON, self.OnRename)
        delButton.Bind(wx.EVT_BUTTON, self.OnDelete)
        clrButton.Bind(wx.EVT_BUTTON, self.OnClear)
        self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnRename)

        vbox.Add((-1, 20)) #距離頂端20像素
        vbox.Add(newButon)
        vbox.Add(renButton, 0, wx.TOP, 5)
        vbox.Add(delButton, 0, wx.TOP, 5)
        vbox.Add(clrButton, 0, wx.TOP, 5)

        btnPanel.SetSizer(vbox)
        hbox.Add(btnPanel, 0.6, wx.EXPAND | wx.RIGHT, 20)
        panel.SetSizer(hbox)

        self.Centre()

    def NewItem(self, e):
        text = wx.GetTextFromUser("輸入一個新項", "插入對話框")
        if text != "":
            self.listbox.Append(text)

    def OnRename(self, e):
        sel = self.listbox.GetSelection()
        text = self.listbox.GetString(sel)
        renamed = wx.GetTextFromUser("項重命名", "重命名對話框", text)

        if renamed != "":
            self.listbox.Delete(sel)
            item_id = self.listbox.Insert(renamed, sel)
            self.listbox.SetSelection(item_id)

    def OnDelete(self, e):
        sel = self.listbox.GetSelection()
        if sel != -1:
            self.listbox.Delete(sel)

    def OnClear(self, e):
        self.listbox.Clear()

def main():
    app = wx.App()
    sample = SampleListBox(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

這個例子展示了如何從wx.ListBox中添加、修改和刪除項。

self.listbox = wx.ListBox(panel)
 hbox.Add(self.listbox, wx.ID_ANY, wx.EXPAND | wx.ALL, 20)

創(chuàng)建一個空的wx.ListBox。設(shè)置列表框邊框距離20px。

self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnRename)

綁定wx. EVT_LISTBOX_DCLICK事件到方法OnRename(),這樣,如果雙擊列表框中的特定元素,就會顯示重命名對話框。

def NewItem(self, e):
        text = wx.GetTextFromUser("輸入一個新項", "插入對話框")
        if text != "":
            self.listbox.Append(text)

通過單擊新建按鈕調(diào)用NewItem()方法。在NuwItem方法中,使用包裝器wx.GetTextFromUser()方法顯示一個wx.TextEntryDialog。將對話框中輸入的文本返回給文本變量。如果文本不是空的,我們用append()方法將它添加到列表框中。

if renamed != "":
       self.listbox.Delete(sel)
       item_id = self.listbox.Insert(renamed, sel)
       self.listbox.SetSelection(item_id)

通過刪除項并在同一位置插入新項來重命名項。將選擇設(shè)置回已修改的項。

def OnDelete(self, e):
        sel = self.listbox.GetSelection()
        if sel != -1:
            self.listbox.Delete(sel)

要刪除一個項,通過調(diào)用GetSelection()方法找到所選項的索引。然后使用delete()方法刪除該項。

def OnClear(self, e):
        self.listbox.Clear()

調(diào)用Clear()方法清除整個列表框。

圖2:wx.ListBox演示

三、wx.CheckListBox復(fù)選列表框

wx.CheckListBox是wx.ListBox的派生類,繼承了它的功能,它在每個選項上額外顯示一個復(fù)選框。

wx.CheckListBox發(fā)出的事件:

  • EVT_CHECKLISTBOX:當(dāng)選中或取消選中復(fù)選框中的項時,處理wx.EVT_CHECKLISTBOX事件。

wx.CkeckListBox常用方法:

  • Check(selfitemcheck=True):設(shè)置給定的項的選擇狀態(tài)。調(diào)用此方法不會導(dǎo)致觸發(fā)wx.EVT_CHECKLISTBOX事件。
  • GetCheckedItems(self):根據(jù)IsChecked返回與控件中已選擇項對應(yīng)的整數(shù)序列。
  • GetCheckedStrings(self):根據(jù)GetChecked返回與控件的已選擇項對應(yīng)的字符串元組。
  • GetSelections(self):返回當(dāng)前選定項的索引列表。
  • IsChecked(selfitem):如果選中給定項則返回True,否則返回False。
  • SetCheckedItems(selfindexes):如果在索引序列中找到項的索引,則設(shè)置項的已選定狀態(tài)。
  • SetCheckedStrings(selfstrings):如果在字符串序列中找到項的字符串,則設(shè)置項的選定狀態(tài)。

圖3:wx.CheckListBox類繼承關(guān)系

將節(jié)二中的演示代碼:

self.listbox = wx.ListBox(panel)

修改成

self.listbox = wx.CheckListBox(panel)

運行,就可以演示使用wx.CheckListBox,效果如圖4:

圖4:wx.CheckListBox演示

四、本文知識點

  • 了解和使用wx.ListBox。
  • 了解和使用wx.CheckListBox。

分享到:
標(biāo)簽:wxPython
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定