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单链表的简单实现方法
Sep 23 Python
Python实现的简单文件传输服务器和客户端
Apr 08 Python
Djang中静态文件配置方法
Jul 30 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
Python处理XML格式数据的方法详解
Mar 21 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
python数据类型强制转换实例详解
Jun 22 Python
python文件及目录操作代码汇总
Jul 08 Python
python3将变量输入的简单实例
Aug 19 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微信红包生成代码分享
2016/10/06 PHP
php实现微信扫码支付
2017/03/26 PHP
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
python后端接收前端回传的文件方法
2019/01/02 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
python脚本第一行如何写
2020/08/30 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
会计助理的岗位职责
2013/11/29 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
培训主管岗位职责
2014/02/01 职场文书
运动会通讯稿200字
2014/02/16 职场文书
高三家长寄语
2014/04/03 职场文书
新教师个人总结
2015/02/06 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers