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 RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
详解python开发环境搭建
Dec 16 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
Python3数字求和的实例
Feb 19 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
如何在Python中妥善使用进度条详解
Apr 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
基于文本的搜索
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
php adodb连接不同数据库
2009/03/19 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
js href的用法
2010/05/13 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
javascript网页随机点名实现过程解析
2019/10/15 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
python绘图库Matplotlib的安装
2014/07/03 Python
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
python的多重继承的理解
2017/08/06 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
python 获取url中的参数列表实例
2018/12/18 Python
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
汽车检测与维修专业求职信
2013/10/30 职场文书
环保倡议书400字
2014/05/15 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
Python集合set()使用的方法详解
2022/03/18 Python