wxPython实现带颜色的进度条


Posted in Python onNovember 19, 2019

本文实例为大家分享了wxPython实现带颜色进度条的具体代码,供大家参考,具体内容如下

【问题描述】

1、在使用wxpython创建进度条时遇到如下问题,使用SetForegroundColour和SetBackgrounColour指令在Win7下不生效,即无法改变进度条的颜色及其背景颜色。

2、查阅资料发现wx.lib.agw.pygauge可以实现进度条颜色的修改(具体指令请参考pygauge说明文档),但其显示效果为平面较差(如下图):

wxPython实现带颜色的进度条

图1-1 pygauge制作的进度条

期望实现的进度条效果如下:

wxPython实现带颜色的进度条

图1-2 期望效果图

【程序代码】

# --------------------------------------------------------------------------------- #
# GAUGE wxPython 
#
# Jin Jianchao, @ 25 Oct 2013
# Mail: jianchaojin@gmail.com
#
# End Of Comments
# --------------------------------------------------------------------------------- #
 
"""
Description
===========
Draw color gauge with wxpython
Usage
=====
Usage example::
  import wx
  import Gauge
  class MyFrame(wx.Frame):
    def __init__(self, parent):
      wx.Frame.__init__(self, parent, -1, "ColourGauge Demo")
      panel = wx.Panel(self)
      
      gauge1 = Gauge.ColourGauge(panel, -1, size=(100, 25))
      gauge1.setPercent(0.8)
      gauge1.setBarColour(wx.RED)
      gauge1.setBackgroundColour(wx.WHITE)
      
      gauge2 = Gauge.ColourGauge(panel, -1, size=(200, 50))
      gauge2.setPercent(0.9)
      gauge2.setBarColour(wx.RED)
      gauge2.setBackgroundColour(wx.BLUE)
      sizer = wx.BoxSizer(wx.VERTICAL)
      sizer.Add(gauge1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 20)
      sizer.Add(gauge2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 20)
    
      panel.SetSizer(sizer)
      sizer.Layout()
  # our normal wxApp-derived class, as usual
  app = wx.App(0)
  frame = MyFrame(None)
  app.SetTopWindow(frame)
  frame.Show()
  app.MainLoop()
"""
 
import wx
import wx.lib.fancytext as fancytext
 
class ColourGauge(wx.Panel):
  
  def __init__(self, parent,id, pos=wx.DefaultPosition, size=wx.DefaultSize):
    wx.Panel.__init__(self, id=id, parent=parent, pos=pos, size=size, style=wx.TAB_TRAVERSAL)
    # creat Gauge
    self.gauge = Gauge(self, id=-1, size=size)
    self.SetAutoLayout(True)
    lc = wx.LayoutConstraints()
    lc.top.SameAs(self, wx.Top, 0) #AsIs()
    lc.left.AsIs()
    lc.height.AsIs()
    lc.right.SameAs(self, wx.Right, 0)
    self.gauge.SetConstraints(lc) 
 
  def setPercent(self, percent):
    self.gauge.setPercent(percent)
    
  def setBackgroundColour(self, colour):
    self.gauge.SetBackgroundColour(colour)
    
  def setBarColour(self, colour):
    self.gauge.color = colour
    
  def getBarColour(self): 
    return self.gauge.color
  
  def setStep(self,step):
    self.gauge.step=step
    
  def makeStep(self):
    if self.gauge.percent>=1.: return
    self.gauge.percent+=self.gauge.step
    if self.gauge.percent>1.:
      self.gauge.percent=1.
    self.Refresh()
    self.Update()
    
class Gauge(wx.Control):
  default_color = "GREEN" # "MAGENTA","BLUE" # "GREEN" "RED" "YELLOW"
  def __init__(self, parent,id,pos=wx.DefaultPosition,size=wx.DefaultSize):
    wx.Control.__init__(self, parent, id, pos, size)
    self.SetBackgroundColour(wx.WHITE)
    self.color= Gauge.default_color
    self.percent = 0.0
    self.step = 0.0
    wx.EVT_PAINT(self, self.OnPaint)
 
  def OnPaint(self, evt):
    dc = wx.PaintDC(self)
    dc.Clear()
    dc.BeginDrawing()
 
    dc.SetPen( wx.Pen(self.color,0) )
    dc.SetBrush( wx.Brush(self.color) )
    w,h = self.GetSizeTuple()
    dc.DrawRectangleRect((0,0,w*self.percent,h))
    percentStr= "%d%%"% int(self.percent*100)
    tx, ty = fancytext.getExtent(percentStr, dc)
    dc.DrawText(percentStr, w/2-tx/2, h/2-ty/2)
 
    dc.EndDrawing()
    
  def setPercent(self,percent):
    if percent <0 or percent >1.:
      return
    self.percent = percent
  def setColor(self,color):
    self.color = color
  def getColor(self): 
    return self.color
  
  def setStep(self,step):
    self.step=step
    
  def makeStep(self):
    if self.percent>=1.: return
    self.percent+=self.step
    if self.percent>1.:
      self.percent=1.
    self.gauge.Refresh()
    self.gauge.Update()

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

Python 相关文章推荐
Python md5与sha1加密算法用法分析
Jul 14 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
详解Python中的测试工具
Jun 09 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
用Python实现职工信息管理系统
Dec 30 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
Python使用Pandas读写Excel实例解析
Nov 19 #Python
pycharm修改file type方式
Nov 19 #Python
wxPython实现列表增删改查功能
Nov 19 #Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 #Python
Python 使用type来定义类的实现
Nov 19 #Python
Pytorch中index_select() 函数的实现理解
Nov 19 #Python
wxPython多个窗口的基本结构
Nov 19 #Python
You might like
详解php中serialize()和unserialize()函数
2017/07/08 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
php xhprof使用实例详解
2019/04/15 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
js仿360开机效果
2019/12/26 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
python中实现字符串翻转的方法
2018/07/11 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
python中altair可视化库实例用法
2021/01/26 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
演讲主持词
2014/03/18 职场文书
环保公益策划方案
2014/08/15 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
安全保证书怎么写
2015/02/28 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle