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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
Python多进程同步简单实现代码
Apr 27 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python决策树分类算法学习
Dec 22 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
numpy:找到指定元素的索引示例
Nov 26 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
python计算auc的方法
Sep 09 Python
Django操作cookie的实现
May 26 Python
python中如何对多变量连续赋值
Jun 03 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
做一个有下拉功能的留言版
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
Python base64编码解码实例
2015/06/21 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python读取文本中的坐标方法
2018/10/14 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
董事长秘书职责
2014/01/31 职场文书
环保建议书300字
2014/05/14 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
实习证明格式范文
2014/10/14 职场文书
费城故事观后感
2015/06/10 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL
redis数据一致性的实现示例
2022/03/18 Redis
MySql数据库触发器使用教程
2022/06/01 MySQL