wxPython修改文本框颜色过程解析

这篇文章主要介绍了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修改文本框颜色过程解析

结果图:上面的自带的控件,下面红色边框是自定义的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-02-13

wxPython实现分隔窗口

本文实例为大家分享了wxPython分隔窗口的具体代码,供大家参考,具体内容如下 1.分割窗口 分隔窗口(wx.SplitterWindow)就是将窗口分成两部分,即左右或上下两部分,如下图所示窗口,整体上分为左右两个窗口,右窗口又分为上下两窗口,两个窗口之间的分隔线是可以拖动的,称为"窗框"(sash). wx.SplitterWindow中一个常用的方法有: SplitVertically(window1, window2, sashPosition=0).设置左右布局的分隔窗口,

wxpython自定义下拉列表框过程图解

这篇文章主要介绍了wxpython自定义下拉列表框过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自定义wxpython下拉列表框,支持修改边框颜色,按钮图标的动态变换 原理同前两片文章一样,使用了两个wx.staticText做边框,一个文本框来显示下拉列表的数据,和一个图片按钮,实现下拉的标志,和一个自带的列表框, 影藏该列表框,不要原来的样式,这里只需要使用它的展示列表的数据功能 自定义列表框的代码: class MyComBox

python wxpython 实现界面跳转功能

用wxpython设计界面时可能会出现界面嵌套的情况 这样就需要进行界面的跳转 但是貌似wxpython没提供界面跳转的方式(也可能是我菜...) 所以就需要借助threading模块 主要思想: 注:该代码为源码的一部分,经过删减可能会导致程序错误,但 主要是通过一个按钮进行跳转,在点击该按钮时关闭当前界面,打开新界面.. 主要函数doClose  按钮触发的函数QU import wx import pymysql,time,threading from MySQL import Make_

wxpython实现按钮切换界面的方法

本文实例为大家分享了wxpython按钮切换界面的具体实现代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,u'登陆',size=(370,280),style=wx.MINIMIZE_BOX| wx.SYSTEM_MENU|wx.CAPTION|wx.CLOSE_BOX) self.SetBac

Python 基于wxpy库实现微信添加好友功能(简洁)

Github:https://github.com/Lyo-hub/wxpy_AddFriend 本程序为基于wxpy库实现的. 1.打开cmd导入一下库. 2.修改库文件中add_friend函数,将状态更改为3. 3.正常使用即可 总结 以上所述是小编给大家介绍的Python 基于wxpy库实现微信添加好友功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

wxPython多个窗口的基本结构

如何在一个wxpython APP里面创建两个框架呢?供大家参考,具体内容如下 代码: import ... import ... class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__( ... class MyFrame2(wx.Frame): def __init__(self): wx.Frame.__init__( ... class MyApp(wx.App): def OnInit(self): self.myf

wxPython电子表格功能wx.grid实例教程

本文实例为大家分享了wxPython电子表格功能的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python #encoding: utf8 import wx import wx.grid as gridlib #import wx.lib.mixins.grid as mixins #--------------------------------------------------------------------------- class SimpleGrid(gr

Yii2 rbac权限控制之菜单menu实例教程

在上篇文章给大家介绍了yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充. 部分小伙们纷纷反映,最后菜单menu怎么控制权限呀,看不懂,搞不定,而且你那貌似没搞完,瞎忽悠!确实没那么全,今天看我们如何实现菜单完美权限化.先罗列下主要讲的内容,不需要的没必要看下去,只为分享给有需要的人. 利用menu表添加菜单 左侧菜单结果adminlte完美呈现 菜单前面自定义ic

Yii2搭建后台并实现rbac权限控制完整实例教程

1.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/config/main-local.php 实际项目中本地的数据库往往跟线上数据库不一致, 我们这里配置到main-local.php就可以了,产品上线后,我们可以使用git或者svn忽略掉main-local.php,线上直接部署. 我们这里使用的mysql数据库,配置如下 当然啦,上面红圈圈的信息需要你自己手动修改掉,要是十分巧合跟我的一样

Java后端Tomcat实现WebSocket实例教程

一.WebSocket简单介绍 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成握手. 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. WebSocket背景 在浏览器中通过http仅能实现单向的

WPF 自定义雷达图开发实例教程

自定义雷达图表如下: 1.创建UserControl,名为"RadarChartControl" 前台: <UserControl x:Class="WpfApplication2.RadarChartControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/win

微信小程序 支付功能实现PHP实例详解

微信小程序 支付功能实现PHP实例详解 前端代码: wx.request({ url: 'https://www.yourhost.com/weixin/WeiActivity/payJoinfee',//改成你自己的链接 header: { 'Content-Type': 'application/x-www-form-urlencoded' }, method:'POST', success: function(res) { console.log(res.data); console.lo

Git 命令行教程及实例教程(附github注册)

本篇博客主要讲解以下问题: Git 常用命令 创建新仓库 检出仓库 添加与提交 推送改动 分支 更新与合并 标签 替换本地改动 Git实例教程 操作小技巧 Git 常用命令常用命令 创建新仓库 创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库. 检出仓库 执行如下命令以创建一个本地仓库的克隆版本: git clone /path/to/repository 如果是远端服务器上的仓库,你的命令会是这个样子: git clone username@host:/path/to/

web标准布局实例教程,用定位轻松解决CSS复杂布局

我相信来经典论坛学习标准的朋友,99%都不是为了进W3C,不是为了成为专业的研究人员,那么大家来的目的是什么呢?很简单,其实都是想通过标准的学习让自己多增加一项技能而已,让自己在找工作的时候不会在被"需要熟练掌握web标准"而难倒,在下面的实例中xhtml并没有什么语意,文章的目的只是让然大家能更好的掌握CSS中相对.绝对定位的用法(新手问此问题的确实很多),及如何有效的结合背景,实现比较复杂的布局.不足之处还望前辈们能指点一二,感谢! ------------------------

Vue.js组件使用开发实例教程

组件 组件可以扩展HTML元素,封装可重用的代码,在较高的层面上,组件是自定义元素,vue.js的编译器为它添加特殊功能,在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. Vue.js的组件可以理解为预先定义好了行为的ViewModel类.一个组件可以预定义很多选项,但最核心的是以下几个: 模板(template):模板声明了数据和最终展现给用户的DOM之间的映射关系. 初始数据(data):一个组件的初始数据状态.对于可复用的组件来说,这通常是私有的状态. 接受的外部参数(p

ThinkPHP跳转页success及error模板实例教程

本文以实例讲解了ThinkPHP跳转页面的success与error方法所对应的视图与控制器的实现方法,通过本实例教程可以帮助读者更好的掌握success方法与error方法的使用. 首先是控制器中,可以使用下代码: <?php // 本文档自动生成,仅供测试运行 class IndexAction extends Action { /** +---------------------------------------------------------- * 默认操作 +----------

Python实现命令行通讯录实例教程

1.实现目标 编写一个命令行通讯录程序,可以添加.查询.删除通讯录好友及电话 2.实现方法 创建一个类来表示一个人的信息.使用字典存储每个人的对象,名字作为键. 使用pickle模块永久地把这些对象存储下来. 使用字典内建的方法添加.删除修改人员信息. 3.思维导图 4.编写伪代码 # 1.创建字典用来存储通讯录信息 # 2.创建人员类,包含姓名.关系.电话三个属性 # 3.创建操作类,包含增加.查询.删除人员,退出,保存并退出五个方法 # 4.程序运行 # 5.判断通讯录文件是否存在 # 6.