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中使用ElementTree解析XML示例
Jun 02 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
Python enumerate索引迭代代码解析
Jan 19 Python
基于Python log 的正确打开方式
Apr 28 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
python列表生成器迭代器实例解析
Dec 19 Python
如何通过Django使用本地css/js文件
Jan 20 Python
python交互模式基础知识点学习
Jun 18 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
python Tkinter模块使用方法详解
Apr 07 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
session在PHP大型web应用中的使用
2011/06/25 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
php实现的农历算法实例
2015/08/11 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
jquery异步循环获取功能实现代码
2010/09/19 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
jQuery知识点整理
2015/01/30 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Python扩展内置类型详解
2018/03/26 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
通信生自我鉴定
2014/01/18 职场文书
小学生暑假感言
2014/02/06 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
中学生逃课检讨书
2015/02/17 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
军训结束新闻稿
2015/07/17 职场文书