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处理大数字的方法
May 27 Python
python数组过滤实现方法
Jul 27 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python实现基于SVM手写数字识别功能
May 27 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
python读取目录下最新的文件夹方法
Dec 24 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
Python 多线程共享变量的实现示例
Apr 17 Python
没编程基础可以学python吗
Jun 17 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
php页面缓存方法小结
2015/01/10 PHP
ThinkPHP模型详解
2015/07/27 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python中list初始化方法示例
2016/09/18 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Flask-WTF表单的使用方法
2019/07/12 Python
PyTorch中permute的用法详解
2019/12/30 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
2014年百日安全生产活动总结
2014/05/04 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
复活读书笔记
2015/06/29 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript