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实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
python实现批量下载新浪博客的方法
Jun 15 Python
Windows下安装python MySQLdb遇到的问题及解决方法
Mar 16 Python
利用Django-environ如何区分不同环境
Aug 26 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
python八皇后问题的解决方法
Sep 27 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
python实现tail -f 功能
Jan 17 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
使用numpy nonzero 找出非0元素
May 14 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重定向的三种方法分享
2012/02/22 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
vue如何判断dom的class
2018/04/26 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
python计算auc的方法
2020/09/09 Python
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
投标保密承诺书
2014/05/19 职场文书
农行心得体会
2014/09/02 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
早读课迟到检讨书
2014/09/25 职场文书
2015年母亲节寄语
2015/03/23 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL