wxPython实现带颜色的进度条
本文实例为大家分享了wxPython实现带颜色进度条的具体代码,供大家参考,具体内容如下
【问题描述】
1、在使用wxpython创建进度条时遇到如下问题,使用SetForegroundColour和SetBackgrounColour指令在Win7下不生效,即无法改变进度条的颜色及其背景颜色。
2、查阅资料发现wx.lib.agw.pygauge可以实现进度条颜色的修改(具体指令请参考pygauge说明文档),但其显示效果为平面较差(如下图):
期望实现的进度条效果如下:
【程序代码】
#---------------------------------------------------------------------------------# #GAUGEwxPython # #JinJianchao,@25Oct2013 #Mail:jianchaojin@gmail.com # #EndOfComments #---------------------------------------------------------------------------------# """ Description =========== Drawcolorgaugewithwxpython Usage ===== Usageexample:: importwx importGauge classMyFrame(wx.Frame): def__init__(self,parent): wx.Frame.__init__(self,parent,-1,"ColourGaugeDemo") 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() #ournormalwxApp-derivedclass,asusual app=wx.App(0) frame=MyFrame(None) app.SetTopWindow(frame) frame.Show() app.MainLoop() """ importwx importwx.lib.fancytextasfancytext classColourGauge(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) #creatGauge 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) defsetPercent(self,percent): self.gauge.setPercent(percent) defsetBackgroundColour(self,colour): self.gauge.SetBackgroundColour(colour) defsetBarColour(self,colour): self.gauge.color=colour defgetBarColour(self): returnself.gauge.color defsetStep(self,step): self.gauge.step=step defmakeStep(self): ifself.gauge.percent>=1.:return self.gauge.percent+=self.gauge.step ifself.gauge.percent>1.: self.gauge.percent=1. self.Refresh() self.Update() classGauge(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) defOnPaint(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() defsetPercent(self,percent): ifpercent<0orpercent>1.: return self.percent=percent defsetColor(self,color): self.color=color defgetColor(self): returnself.color defsetStep(self,step): self.step=step defmakeStep(self): ifself.percent>=1.:return self.percent+=self.step ifself.percent>1.: self.percent=1. self.gauge.Refresh() self.gauge.Update()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。