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操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
python实现Zabbix-API监控
Sep 17 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
Python如何调用外部系统命令
Aug 07 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
手动安装python3.6的操作过程详解
Jan 13 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
php+javascript的日历控件
2009/11/19 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
js右键菜单效果代码
2007/07/21 Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
详解VUE 数组更新
2017/12/16 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
最新教师自我评价分享
2013/11/12 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
python某漫画app逆向
2021/03/31 Python