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读取Json字典写入Excel表格的方法
Jan 03 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
python实现简单http服务器功能
Sep 17 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 Python
Django缓存Cache使用详解
Nov 30 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 Python
python scrapy简单模拟登录的代码分析
Jul 21 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
php文件读取方法实例分析
2015/06/20 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
python2与python3共存问题的解决方法
2018/09/18 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
python 获取字典键值对的实现
2020/11/12 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
教师绩效考核方案
2014/01/21 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
500字小学生检讨书
2015/02/19 职场文书
社区结对共建协议书
2016/03/23 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python
pandas中关于apply+lambda的应用
2022/02/28 Python