wxPython修改文本框颜色过程解析


Posted in Python onFebruary 14, 2020

这篇文章主要介绍了wxPython修改文本框颜色过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

由于工作需要使用wxPython实现一个美观的新增数据界面,这个界面上的文本框要像html中文本框一样可以设置边框颜色,和字体垂直居中。

当时也看了许多资料,发现wxpython并没有提供这样的修改方法,后来,花了一段时间,想出基于wxpython,自定义文本框控件。

具体思路如下:

1、 去除现有wxpython 的wx.TextCtrl控件的边框,再使用wx.StaticText给wx.TextCtrl做一个边框。(要相信,界面上看到的东西,只是开发人想让你看到的)

2、 这个边框需要使用两个wx.StaticText控件,为啥要用两个?

a) 模拟边框是需要色差的,由于色差存在,所以看得像一个边框。

b) 先使用一个wx.StaticText控件,设置一个黑色背景色,再在这个wx.StaticText控件上添加一个白色背景,并且长宽小于父亲2px的wx.StaticText控,这个界面上就能1px的黑色线条。这就是我们需要的边框,并且这个边框可以边框颜色和大小。(只需要改父亲控件的背景设,和子wx.StaticText的大小就行)

c) 再同理,来把无边框的wx.TextCtrl放入这个边框中,设置位置,就得到了自定义的可以改变边框颜色和文本垂直居中的文本框

wxPython修改文本框颜色过程解析

3. 合成示意图

自定义控件代码:

import wx


class MyText:
  """自定义文本框"""
  def __init__(self,parent,pos,size=(80,36),readOnly= False):
    self.defaultFontSize= 10 #默认字体大小
    self.TextCtrlColor = 'white' #文本框的背景色
    self.defaultBorderColoe = '#EAEAEA' #默认边框颜色

    self.textCtrl, self.border,self.bg = self.__CreateTextCtrl(parent,pos,size,self.defaultBorderColoe,readOnly)

  def __CreateTextCtrl(self,parent,pos,size,borderColor,readOnly=True, borderSize=1):
    """创建文本框"""
    border = wx.StaticText(parent, -1, '', size=size, pos=pos) #创建边框
    border.SetBackgroundColour(borderColor)  #设置边框要展现的颜色
    bg = wx.StaticText(border, -1, '', size=((size[0]-borderSize*2), (size[1]-borderSize*2))
                , pos=(borderSize,borderSize))
    if readOnly:    #设置文本框是否只读,还有去自带的边框
      style = wx.TE_READONLY|wx.NO_BORDER
    else:
      style = wx.NO_BORDER

    textCtrl = wx.TextCtrl(bg, -1, size=((size[0]-10),self.defaultFontSize*2)
                , pos=(5,(size[1]-2*self.defaultFontSize-borderSize*2)/2),style =style)
    font = wx.Font(self.defaultFontSize,wx.DEFAULT,wx.NORMAL,wx.NORMAL,False,'微软雅黑')
    textCtrl.SetFont(font)

    if readOnly:
      bg.SetBackgroundColour('rgb(240,240,240)')
      self.TextCtrlColor = 'rgb(240,240,240)'
    else:
      bg.SetBackgroundColour(textCtrl.GetBackgroundColour())
      self.TextCtrlColor = textCtrl.GetBackgroundColour()
    bg.Bind(wx.EVT_LEFT_UP,self.__ClickEvent)
    return textCtrl,border,bg

  def __ClickEvent(self,evt):
    """点击时焦点设置在文本框上"""
    self.textCtrl.SetFocus()

  def SetValue(self,value):
    if not value:
      value = ''
    self.textCtrl.SetValue(value)

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

  def SetBorderColor(self,color):
    self.border.SetBackgroundColour(color)
    self.border.Refresh()

  def SetFontColor(self,color):
    self.textCtrl.SetForegroundColour(color)
    self.textCtrl.SetBackgroundColour(self.TextCtrlColor)

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

  def SetBackgroundColour(self,color):
    self.bg.SetBackgroundColour(color)
    self.textCtrl.SetBackgroundColour(color)
    self.textCtrl.Refresh()

测试代码:

# 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)

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')
frame.Show()
app.MainLoop()

wxPython修改文本框颜色过程解析

结果图:上面的自带的控件,下面红色边框是自定义的

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

Python 相关文章推荐
Python实现拼接多张图片的方法
Dec 01 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
django的model操作汇整详解
Jul 26 Python
django-初始配置(纯手写)详解
Jul 30 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 Python
python中提高pip install速度
Feb 14 #Python
pycharm快捷键汇总
Feb 14 #Python
python随机模块random使用方法详解
Feb 14 #Python
python实现连连看游戏
Feb 14 #Python
python读取与处理netcdf数据方式
Feb 14 #Python
Python class的继承方法代码实例
Feb 14 #Python
python super函数使用方法详解
Feb 14 #Python
You might like
php桌面中心(二) 数据库写入
2007/03/11 PHP
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
采用call方式实现js继承
2014/05/20 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
JS使用数组实现的队列功能示例
2019/03/04 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
vue路由插件之vue-route
2019/06/13 Javascript
Python的时间模块datetime详解
2017/04/17 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
最新销售员个人自荐信
2013/09/21 职场文书
成考报名单位证明范本
2014/01/16 职场文书
小学捐书活动总结
2014/07/05 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫