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实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
Python中的ceil()方法使用教程
May 14 Python
python二分查找算法的递归实现方法
May 12 Python
python 垃圾收集机制的实例详解
Aug 20 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
python 模拟在天空中放风筝的示例代码
Apr 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
python实现学生管理系统
2018/01/11 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
物流司机岗位职责
2013/12/28 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
教师党员承诺书2015
2015/01/21 职场文书
深入理解python多线程编程
2021/04/18 Python
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js