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编程入门的一些基本知识
May 13 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
python中import学习备忘笔记
Jan 24 Python
Python实现一个简单的验证码程序
Nov 03 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
kafka-python 获取topic lag值方式
Dec 23 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Python接口测试结果集实现封装比较
May 01 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
Python数据库封装实现代码示例解析
Sep 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
BBS(php & mysql)完整版(一)
2006/10/09 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Python的Django框架中的表单处理示例
2015/07/17 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
python调用百度语音识别api
2018/08/30 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
深入学习python多线程与GIL
2019/08/26 Python
python实现根据文件格式分类
2019/10/31 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
opencv python如何实现图像二值化
2020/02/03 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
询价采购方案
2014/06/09 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
保研推荐信范文
2015/03/25 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
python如何进行基准测试
2021/04/26 Python
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers