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中的描述符(descriptor)
Jun 03 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
python GUI实现小球满屏乱跑效果
May 09 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python实现人机猜拳小游戏
Feb 03 Python
在Python中通过threshold创建mask方式
Feb 19 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
Python学习之os模块及用法
Jun 03 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
react build 后打包发布总结
2018/08/24 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
不要用强制方法杀掉python线程
2017/02/26 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
python实现感知器
2017/12/19 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
给我一面国旗 python帮你实现
2019/09/30 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
大二学生职业生涯规划书
2014/02/05 职场文书
公司会议策划方案
2014/05/17 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
小学体育课教学反思
2016/02/16 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL