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 sys.path详细介绍
Oct 17 Python
python实现简单的TCP代理服务器
Oct 08 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
Python生成器以及应用实例解析
Feb 08 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
python字符串反转的四种方法详解
Dec 02 Python
python Canny边缘检测算法的实现
Apr 24 Python
python怎么判断模块安装完成
Jun 19 Python
Python如何使用ElementTree解析xml
Oct 12 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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 用sock技术发送邮件的函数
2007/07/21 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
javascript基础知识讲解
2017/01/11 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
python中__call__方法示例分析
2014/10/11 Python
python实现人脸识别代码
2017/11/08 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
两道JAVA笔试题
2016/09/14 面试题
《只有一个地球》教学反思
2014/02/14 职场文书
兴趣小组活动总结
2014/05/05 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
真诚的求职信
2014/07/04 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
个人年终总结怎么写
2015/03/09 职场文书
公司借条范本
2015/05/25 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
go开发alertmanger实现钉钉报警
2021/07/16 Golang
Python基本数据类型之字符串str
2021/07/21 Python