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使用sorted函数对列表进行排序的方法
Apr 04 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
python链接Oracle数据库的方法
Jun 28 Python
Python变量作用范围实例分析
Jul 07 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
python使用rpc框架gRPC的方法
Aug 24 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
Python使用configparser读取ini配置文件
May 25 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
Pyhton模块和包相关知识总结
May 12 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 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 SQL防注入代码集合
2008/04/25 PHP
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
javascrit中undefined和null的区别详解
2019/04/07 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
Python3中的2to3转换工具使用示例
2015/06/12 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
外语系毕业生找工作的求职信
2013/11/28 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
村官学习十八大感想
2014/01/15 职场文书
医学生个人求职信范文
2014/02/07 职场文书
社会学专业求职信
2014/02/24 职场文书
班班通校本培训方案
2014/03/12 职场文书
情况说明书格式范文
2014/05/06 职场文书
安全责任书怎么写
2014/07/28 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书