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 break语句详解
Mar 11 Python
Python跳出循环语句continue与break的区别
Aug 25 Python
Python生成随机MAC地址
Mar 10 Python
python中for语句简单遍历数据的方法
May 07 Python
python文件的md5加密方法
Apr 06 Python
python实现ip代理池功能示例
Jul 05 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
python requests模拟登陆github的实现方法
Dec 26 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 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封装的验证码工具类完整实例
2016/10/19 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
node.js遍历目录的方法示例
2018/08/01 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
Python中的自省(反射)详解
2015/06/02 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
python 实现单例模式的5种方法
2020/09/23 Python
如何完美的建立一个python项目
2020/10/09 Python
adidas泰国官网:adidas TH
2020/07/11 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
学校介绍信范文
2014/01/14 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
高一新生军训感言
2014/03/02 职场文书
消防安全员岗位职责
2014/03/10 职场文书
保安2014年终工作总结
2014/12/06 职场文书
2015年采购员工作总结
2015/04/27 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS