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中的内置函数getattr()介绍及示例
Jul 20 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
python实现发送和获取手机短信验证码
Jan 15 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python binascii 进制转换实例
Jun 12 Python
浅谈django channels 路由误导
May 28 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
Python socket如何解析HTTP请求内容
Feb 12 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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
学习php中的正则表达式
2014/08/17 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
javascript控制台详解
2015/06/25 Javascript
实例浅析js的this
2016/12/11 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
八大排序算法的Python实现
2021/01/28 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
python实现网页自动签到功能
2019/01/21 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
python识别验证码图片实例详解
2020/02/17 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python如何定义接口和抽象类
2020/07/28 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
班组长的岗位职责
2013/12/09 职场文书
文明寄语大全
2014/04/11 职场文书
档案接收函格式
2015/01/30 职场文书
旅行社计调工作总结
2015/08/12 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
浅谈python中的多态
2021/06/15 Python
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android