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查询Mysql时返回字典结构的代码
Jun 18 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Python3 pywin32模块安装的详细步骤
May 26 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 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 cache类代码(php数据缓存类)
2010/04/15 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
js表格分页实现代码
2009/09/18 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
简单介绍Python中的struct模块
2015/04/28 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
园艺专业毕业生求职信
2014/09/02 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
在人间读书笔记
2015/06/30 职场文书
结婚纪念日感言
2015/08/01 职场文书
小学班主任工作随笔
2015/08/15 职场文书
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers