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实现人人网登录示例分享
Jan 19 Python
Django实现自定义404,500页面教程
Mar 26 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
python操作mysql代码总结
Jun 01 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
Python的iOS自动化打包实例代码
Nov 22 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
详解python读取image
Apr 03 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
express启用https使用小记
2019/05/21 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
酒店应聘自荐信
2013/11/09 职场文书
应届生幼儿园求职信
2013/11/12 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
单位未婚证明范本
2014/11/25 职场文书
小学老师对学生的评语
2014/12/29 职场文书
小学教师节活动总结
2015/03/20 职场文书
李强感恩观后感
2015/06/17 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android