• wxPython控件学习之wx.ComboBox


     wx.Combobox由一个编辑框和列表组成。它可以显示为带有可编辑或只读文本框的静态列表,也可以显示为带下拉列表的文本区域,或者是不带文本框的下拉列表。一个wx.Combobox只允许单选。wx.Combobox的选择项从0开始编号。如果你需要定制wx.Combobox,可以参照wx.ComboCtrl,wx.OwnerDrawnComboBox,wx.ComboPopup和即将可用的wx.BitmapComBox等控件。

    1. Style 样式

    wx.CB_SIMPLE  创建一个带列表显示的combobox.只支持windows

    wx.CB_DROPDOWN 创建一个带下拉列表的combobox

    wx.CB_READONLY 同wx.CB_DROPDOWN,但只有被当做combobox选择项的字符串才能被选定,不在选择列表中的字符串无法将无法填入控件中的文本框。

    wx.CB_SORT 列表项按字母序排序

    wx.TE_PROCES_ENTER 此样式下控件会产生事件wx.EVT_COMMAND_TEXT_ENTER(否则按下Enter键要么被控件内部处理,要么被用于控件导航)。仅支持windows。

    2. 事件

    EVT_COMBOBOX(id,func) //当列表中的一个项被选择时,处理wx.EVT_COMMAND_COMBOBOX_SELECTED事件。注意到调用GetValue返回的是选择后的值。

    EVT_TEXT(id,func) //当combobox文本改变时,处理wx.EVT_COMMAND_TEXT_UPDATED事件

    EVT_TEXT_ENTER(id,func) //当在combobox中按下回车键时,处理wx.EVT_TEXT_ENTER事件。

    # -*- coding: UTF-8 -*-
    
    #-------------------------------------------------------------------------------
    # Name:        模块1
    # Purpose:
    #
    # Author:      ankier
    #
    # Created:     10/10/2012
    # Copyright:   (c) ankier 2012
    # Licence:     <your licence>
    #-------------------------------------------------------------------------------
    
    import wx
    
    class ComboBoxFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, 'Combo Box Example', size=(350, 300))
            panel = wx.Panel(self, -1)
            sampleList = ['zero', 'one', 'two', 'three', 'four', 'five','six', 'seven', 'eight']
    
            flexSizer = wx.FlexGridSizer(4,4,6,6)
            flexSizer.AddGrowableCol(1)
            flexSizer.AddGrowableCol(3)
    
            #定义普通样式的comboBox, 接受键盘输入,但不会改变Item
            commonLable = wx.StaticText(panel, -1, "普通样式")
            commonComboBox = wx.ComboBox(panel, -1, value = "zero", choices = sampleList, style = wx.CB_DROPDOWN)
    
            #定义简单样式的ComboBox,
            simpleLable = wx.StaticText(panel, -1, "简单样式:")
            simpleComboBox = wx.ComboBox(panel, -1, value =  "zero", choices = sampleList, style = wx.CB_SIMPLE)
    
            #定义只读样式的ComboBox,
            readonlyLable = wx.StaticText(panel, -1, "只读样式:")
            readonlyComboBox = wx.ComboBox(panel, -1, value =  "zero", choices = sampleList, style = wx.CB_READONLY)
    
            #定义二级联动下拉列表
            cityDict = {'安徽':["合肥", "淮南"], "江苏":["苏州","南京"]}
    
            #定义第一级菜单
            proviceLable = wx.StaticText(panel, -1, "省份:")
            proviceComboBox = wx.ComboBox(panel, -1, value =  cityDict.keys()[0], choices = cityDict.keys(), style = wx.CB_READONLY)
            #定义第二级菜单
            cityLable = wx.StaticText(panel, -1, "城市:")
            cityComboBox = wx.ComboBox(panel, -1, value =  cityDict[cityDict.keys()[0]][0], choices = cityDict[cityDict.keys()[0]], style = wx.CB_READONLY)
    
            flexSizer.AddMany([
                                (commonLable, 0, wx.SHAPED|wx.ALIGN_RIGHT), (commonComboBox, 1, wx.EXPAND), (simpleLable, 0, wx.SHAPED|wx.ALIGN_RIGHT),(simpleComboBox, 1, wx.EXPAND)
                                ,(readonlyLable, 0, wx.SHAPED|wx.ALIGN_RIGHT), (readonlyComboBox, 1, wx.EXPAND),(wx.Size(6,6), 0, wx.SHAPED|wx.ALIGN_RIGHT), (wx.Size(6,6), 1, wx.EXPAND)
                                ,(proviceLable, 0, wx.SHAPED|wx.ALIGN_RIGHT), (proviceComboBox, 1, wx.EXPAND),(wx.Size(6,6), 0, wx.SHAPED|wx.ALIGN_RIGHT), (wx.Size(6,6), 1, wx.EXPAND)
                                ,(cityLable, 0, wx.SHAPED|wx.ALIGN_RIGHT), (cityComboBox, 1, wx.EXPAND),(wx.Size(6,6), 0, wx.SHAPED|wx.ALIGN_RIGHT), (wx.Size(6,6), 1, wx.EXPAND)
                                ])
    
            panel.SetSizerAndFit(flexSizer)
    
    
            #定义 一级下拉列表切换时,刷新二级菜单项的响应事件
            self.__ProvinceComboBox = proviceComboBox
            self.__SecityDict = cityDict
            self.__CityComboBox= cityComboBox
            panel.Bind(wx.EVT_COMBOBOX,  self.__OnComboBoxSelected, proviceComboBox,)
    
        def __OnComboBoxSelected(self, event):
            currentProvinceIndex = self.__ProvinceComboBox.GetSelection()
            if wx.NOT_FOUND == currentProvinceIndex: return
            value = self.__ProvinceComboBox.GetItems()[currentProvinceIndex]
            
            #注意中文在List dict 等存储时候, utf-8 格式不一致问题
            value = value.encode('utf-8')
            
            cityList = self.__SecityDict[value]
            self.__CityComboBox.SetItems(cityList)
            self.__CityComboBox.SetValue(cityList[0])
    
    
    
    
    def main():
        app = wx.PySimpleApp()
        ComboBoxFrame().Show()
        app.MainLoop()
    
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    在sed中怎么样产生控制字符^M
    递归遍历目录的shell脚本
    递归法遍历目录查找文件
    【30.01%】【hdu 3397】Sequence operation
    【23.68%】【hdu 2871】Memory Control
    【33.18%】【hdu 5877】Weak Pair (3种解法)
    【38.96%】【hdu 1540】Tunnel Warfare
    【26.8%】【CF 46D】Parking Lot
    【35.20%】【CF 706D】Vasiliy's Multiset
    【33.20%】【LA 4320】【Ping pong】
  • 原文地址:https://www.cnblogs.com/ankier/p/2719003.html
Copyright © 2020-2023  润新知