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新手中常见的疑惑及解答
Jun 14 Python
Python使用filetype精确判断文件类型
Jul 02 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
自学python的建议和周期预算
Jan 30 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
Python 中Django安装和使用教程详解
Jul 03 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
Python Django view 两种return的实现方式
Mar 16 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
关于python中模块和重载的问题
Nov 02 Python
Python数据处理的三个实用技巧分享
Apr 01 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
获得Google PR值的PHP代码
2007/01/28 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
p5.js入门教程之图片加载
2018/03/20 Javascript
浅述python中argsort()函数的实例用法
2017/03/30 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
python list转矩阵的实例讲解
2018/08/04 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
详解Python3 pandas.merge用法
2019/09/05 Python
python要安装在哪个盘
2020/06/15 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
SQL Server面试题
2013/04/04 面试题
行政求职信
2014/07/04 职场文书
博士生求职信
2014/07/06 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
教师节慰问信
2015/02/15 职场文书
大学生求职信怎么写
2015/03/19 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书