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 list转dict示例分享
Jan 28 Python
python rsa 加密解密
Mar 20 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
Python列表删除的三种方法代码分享
Oct 31 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
Python玩转加密的技巧【推荐】
May 13 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
Python读取JSON数据操作实例解析
May 18 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
Opencv 图片的OCR识别的实战示例
Mar 02 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
php unicode编码和字符串互转的方法
2020/08/12 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
Python中的闭包实例详解
2014/08/29 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
网站编辑求职信
2013/10/17 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
电子商务专业自荐信
2014/06/02 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
入党政审材料范文
2014/12/24 职场文书
心灵点滴观后感
2015/06/02 职场文书
python 逐步回归算法
2021/04/06 Python
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers