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的lambda匿名函数的简单介绍
Apr 25 Python
python实现折半查找和归并排序算法
Apr 14 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
PyTorch安装与基本使用详解
Aug 31 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
php全排列递归算法代码
2012/10/09 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
python plotly画柱状图代码实例
2019/12/13 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
python exit出错原因整理
2020/08/31 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
优秀员工评语
2014/02/10 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
党员倡议书
2015/01/19 职场文书
《比的意义》教学反思
2016/02/18 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis