wxpython自定义下拉列表框过程图解


Posted in Python onFebruary 14, 2020

这篇文章主要介绍了wxpython自定义下拉列表框过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

自定义wxpython下拉列表框,支持修改边框颜色,按钮图标的动态变换

原理同前两片文章一样,使用了两个wx.staticText做边框,一个文本框来显示下拉列表的数据,和一个图片按钮,实现下拉的标志,和一个自带的列表框,

影藏该列表框,不要原来的样式,这里只需要使用它的展示列表的数据功能

wxpython自定义下拉列表框过程图解

自定义列表框的代码:

class MyComBox:
  """自定义下拉列表框"""
  def __init__(self,parent,pos,size=(200,35),choices=[],readOnly=False,borderColor='#EAEAEA',borderSize=1):
    self.defaultfontSize = 10
    self.defaultBorderColor = '#EAEAEA'
    self.defaultFontColor = 'black'

    self.textCtrl,self.combox,self.background,self.arrow_button = self.__CreateComBox(parent,pos,size,
                                             choices,readOnly,borderColor,borderSize)
  def __CreateComBox(self,parent,pos,size,list,readOnly,borderColor,borderSize):
    #创建边框
    border = wx.StaticText(parent,-1,"",pos=pos,size=size)
    border.SetBackgroundColour(borderColor)
    bg = wx.StaticText(border,-1,"",size=((size[0]-borderSize*2),(size[1]-borderSize*2)),pos=(borderSize,borderSize))
    style = wx.TE_READONLY | wx.NO_BORDER

    #创建数据展示框
    self.textCtrl = wx.TextCtrl(bg,-1,size=((size[0]-30),(self.defaultfontSize*2)),
                  pos=(5,(size[1]-2*self.defaultfontSize-borderSize*2)/2),style= style)
    self.textCtrl.SetBackgroundColour('white')
    #点击文本框显示数据
    if not readOnly:
      self.textCtrl.Bind(wx.EVT_LEFT_DOWN,self.__OnClick)

    #创建下拉点击按钮
    bmp = wx.Image("xia.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap()
    arrow_button = wx.BitmapButton(bg,-1,bmp,size = (20,size[1]),pos=(size[0]-22,0),style =wx.NO_BORDER)

    #构建列表框,展示列表的数据
    self.chooseBox = wx.ComboBox(parent,-1,value="",size=(size[0],-1),pos = (pos[0],pos[1]+10),choices=list,style=wx.TE_READONLY)
    self.chooseBox.Hide()
    self.chooseBox.Bind(wx.EVT_COMBOBOX_CLOSEUP,self.__GetValue)

    #设置显示下列列表按钮
    arrow_button.SetBackgroundColour('white')
    font = wx.Font(self.defaultfontSize,wx.DEFAULT,wx.NORMAL,wx.NORMAL,False,'微软雅黑')
    self.textCtrl.SetFont(font)

    #设置只读情况的样式
    if readOnly:
      bg.SetBackgroundColour('rgb(240,240,240)')
      self.textCtrl.SetBackgroundColour('rgb(240,240,240)')
      arrow_button.SetBackgroundColour('rgb(240,240,240)')
    else:
     # bg.SetBackgroundColour(self.textCtrl.GetBackgroundColour())
      arrow_button.Bind(wx.EVT_BUTTON,self.__OnClick)

    return self.textCtrl,self.chooseBox,border,arrow_button

  def __GetValue(self,event):
    if self.chooseBox.GetValue()!='':
      self.textCtrl.SetValue(self.chooseBox.GetValue())
      self.chooseBox.Hide()
      bmp = wx.Image("xia.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap()
      self.arrow_button.SetBitmap(bmp)
    if self.chooseBox.GetValue()!='请选择':
      self.textCtrl.SetForegroundColour(self.defaultFontColor)


  def __OnClick(self,event):
    self.chooseBox.Show()
    self.chooseBox.Popup()
    bmp = wx.Image("shang.jpg", wx.BITMAP_TYPE_ANY).ConvertToBitmap()
    self.arrow_button.SetBitmap(bmp)

  def GetValue(self):
    return self.textCtrl.GetValue()

  def SetValue(self,value):
    if not value:
      value = u'请选择'
    self.textCtrl.SetValue(value)
    self.combox.SetValue(value)


  def SetList(self,list):
    """设置下拉列表中的数据"""
    self.combox.SetItems(list)

  def SetBorderColor(self,color):
    self.background.SetBackgroundColour(color)


  def SetFont(self,font):
    self.textCtrl.SetFont(font)

  def SetForegroundColour(self,color):
    self.textCtrl.SetForegroundColour(color)

  def Bind(self, event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY):
    self.textCtrl.Bind(event,handler)

图片:, ,这个需要下载下去,或者自己找漂亮的图片

测试代码:

# coding:utf-8
import wx

from wxpython import Mywxpython

app = wx.App()
frame = wx.Frame(None, title="Gui Test Editor", pos=(1000, 200), size=(500, 400))

panel = wx.Panel(frame)
panel.SetBackgroundColour('white')
# path_text = wx.TextCtrl(panel, size=(260, 36))
#
# my_text = Mywxpython.MyText(panel,pos=(10, 50),size=(260,36))
# my_text1 = Mywxpython.MyText(panel,pos=(10, 100),size=(260,36),readOnly=True)
# my_text.SetBorderColor('red')
list = ['1','2','3','4']
#wx.ComboBox(panel,-1,value="",size=(80,-1),pos = (100,110),choices=list,style=wx.TE_READONLY)

#my_button = Mywxpython.MyButton(panel,title="点我",pos=(10, 150))
combox = Mywxpython.MyComBox(panel,choices=['1','2','3','4'],pos=(10, 150))
#combox .SetValue("请选择")
frame.Show()
app.MainLoop()

结果图:

wxpython自定义下拉列表框过程图解

按钮又有点丑,需要自己定义,搞两个好看得图标,

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python采用raw_input读取输入值的方法
Aug 18 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
python实现爬取千万淘宝商品的方法
Jun 30 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
python实现梯度下降和逻辑回归
Mar 24 Python
Python logging模块写入中文出现乱码
May 21 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 #Python
python 命名规范知识点汇总
Feb 14 #Python
wxPython修改文本框颜色过程解析
Feb 14 #Python
python中提高pip install速度
Feb 14 #Python
pycharm快捷键汇总
Feb 14 #Python
python随机模块random使用方法详解
Feb 14 #Python
python实现连连看游戏
Feb 14 #Python
You might like
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
jquery自定义表格样式
2015/11/23 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
Python写的英文字符大小写转换代码示例
2015/03/06 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
图解Python变量与赋值
2018/04/03 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Flask-WTF表单的使用方法
2019/07/12 Python
python对文件的操作方法汇总
2020/02/28 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
小学班级特色活动方案
2014/08/31 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
社区元宵节活动总结
2015/02/06 职场文书
运动会5000米加油稿
2015/07/21 职场文书
董事长秘书工作总结
2015/08/14 职场文书