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的Flask框架下收发电子邮件的教程
Apr 21 Python
Python版微信红包分配算法
May 04 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
如何利用Fabric自动化你的任务
Oct 20 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php加密解密实用类分享
2014/01/07 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
node内置调试方法总结
2018/02/22 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python getopt详解及简单实例
2016/12/30 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
flask框架中的cookie和session使用
2021/01/31 Python
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
一套.net面试题及答案
2016/11/02 面试题
烹饪自我鉴定
2014/03/01 职场文书
《四季》教学反思
2014/04/08 职场文书
活动总结报告范文
2014/05/04 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2014年采购工作总结
2014/11/20 职场文书
荒岛余生观后感
2015/06/09 职场文书
老兵退伍感言
2015/08/03 职场文书
网络研修随笔感言
2015/11/18 职场文书