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脚本操作MongoDB的教程
Apr 16 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
基于DataFrame改变列类型的方法
Jul 25 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
Python交互式图形编程的实现
Jul 25 Python
python redis连接 有序集合去重的代码
Aug 04 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Pycharm小白级简单使用教程
Jan 08 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
python Protobuf定义消息类型知识点讲解
Mar 02 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操作文件方法问答
2007/03/16 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python 统计字数的思路详解
2018/05/08 Python
Python错误处理操作示例
2018/07/18 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
迷你西餐厅创业计划书范文
2013/12/31 职场文书
搞笑的获奖感言
2014/08/16 职场文书
学校开学标语
2014/10/06 职场文书
培训讲师开场白
2015/06/01 职场文书