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递归实现汉诺塔算法示例
Mar 19 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python中文编码知识点
Feb 18 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
在Django中实现添加user到group并查看
Nov 18 Python
Python同时处理多个异常的方法
Jul 28 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
Pytorch使用shuffle打乱数据的操作
May 20 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
详解React 元素渲染
2020/07/07 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
python中Flask框架简单入门实例
2015/03/21 Python
Python反射的用法实例分析
2018/02/11 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python实现浪漫的烟花秀
2019/01/30 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
学期研究性学习个人的自我评价
2014/01/09 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
二年级数学教学反思
2014/01/21 职场文书
班级文化标语
2014/06/23 职场文书
销售团队获奖感言
2014/08/14 职场文书
房产公证委托书范本
2014/09/20 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
go原生库的中bytes.Buffer用法
2021/04/25 Golang
MySql新手入门的基本操作汇总
2021/05/13 MySQL