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 Tkinter简单布局实例教程
Sep 03 Python
Python中的模块和包概念介绍
Apr 13 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
python对url格式解析的方法
May 13 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
Python中操作符重载用法分析
Apr 29 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
Python3 实现爬取网站下所有URL方式
Jan 16 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 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
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
高级销售求职信
2014/02/21 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
课内比教学心得体会
2014/09/09 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
校运会广播稿
2015/08/19 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
R9700摩机记
2022/04/05 无线电