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 网络编程起步(Socket发送消息)
Sep 06 Python
Python实现爬取知乎神回复简单爬虫代码分享
Jan 04 Python
使用Python写个小监控
Jan 27 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
Django框架实现分页显示内容的方法详解
May 10 Python
PyQt5固定窗口大小的方法
Jun 18 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
python默认参数调用方法解析
Feb 09 Python
Python实现区域填充的示例代码
Feb 03 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 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中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
js实现旋转木马效果
2017/03/17 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
python网络编程之文件下载实例分析
2015/05/20 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
我的中国梦演讲稿高中篇
2014/08/19 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
教师个人发展总结
2015/02/11 职场文书
务工证明怎么写
2015/06/18 职场文书
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android