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中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python中str.format()详解
Mar 12 Python
python+opencv实现动态物体识别
Jan 09 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python实现简单银行管理系统
Oct 25 Python
Python笔记之观察者模式
Nov 20 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
Python绘图之柱形图绘制详解
Jul 28 Python
Python urlopen()参数代码示例解析
Dec 10 Python
Python: glob匹配文件的操作
Dec 11 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中session过期时间设置及session回收机制介绍
2014/05/05 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
Python join()函数原理及使用方法
2020/11/14 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
python3 kubernetes api的使用示例
2021/01/12 Python
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
Linux操作面试题
2012/05/16 面试题
材料成型专业个人求职信范文
2013/09/25 职场文书
先进党支部事迹材料
2014/01/13 职场文书
八年级语文教学反思
2014/02/11 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
优秀党员事迹材料
2014/12/18 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
职工食堂管理制度
2015/08/06 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript