The wxPython widget wx.Gauge is commonly called a progress bar. In this code snippet I have bound the wx.Gauge to a wx.Slider, as you move the slider so do the indicating bars of the gauge. A second method is explored too, here the gauge indicates the progress of a timed loop. Hopefully there is enough information to create your own applications.
wxPython Gauge Experiment
# experiment with wxPython's wx.Gauge
# wxGauge is read-only and generates no events
# wx.Gauge(parent, id, range, position_tuple, size_tuple, style)
# position_tuple (x, y) of upper left corner, size_tuple (width, height)
# (on my Windows XP box the slider responds to the mouse-wheel, when it has the focus)
# tested with Python24 and wxPython26 vegaseat 18oct2005
import wx
import time
class MyPanel(wx.Panel):
"""
class MyPanel creates a panel with a slider, button and a gauge (progress bar)
this class inherits wx.Panel
(putting your components/widgets on a panel increases versatility)
"""
def __init__(self, parent, id):
# create a panel
wx.Panel.__init__(self, parent, id)
self.SetBackgroundColour("white")
# default id = -1 is used, initial value = 50, min value = 0, max value = 100
self.slider1 = wx.Slider(self, -1, 50, 0, 100, (10, 10), (390, 50),
wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)
# default id = -1 is used, range is 0 to 100, default is horizontal style
self.gauge1 = wx.Gauge(self, -1, 100, (10, 70), (390, 25))
# set gauge to initial slider position
self.pos1 = self.slider1.GetValue()
self.gauge1.SetValue(self.pos1)
str1 = "the gauge is bound to the slider, just click and drag the pointer"
self.label1 = wx.StaticText(self, -1, str1, (10, 100))
str2 = "the gauge can be driven with a timer loop"
self.label2 = wx.StaticText(self, -1, str2, (10, 140))
self.button1 = wx.Button(self, -1, "Press to start timer", (10, 170))
# respond to changes in slider position ...
self.slider1.Bind(wx.EVT_SLIDER, self.sliderUpdate)
# respond to the click of the button
self.button1.Bind(wx.EVT_BUTTON, self.button1Click)
def sliderUpdate(self, event):
# get the slider position
self.pos1 = self.slider1.GetValue()
# set the gauge position
self.gauge1.SetValue(self.pos1)
def button1Click(self, event):
"""starts a timed loop 0 to 100"""
for k in range(101):
# move the progress bar/gauge
self.gauge1.SetValue(k)
# move the slider too for the fun of it
self.slider1.SetValue(k)
# 0.015 second intervals
time.sleep(0.015)
app = wx.PySimpleApp()
# create a window/frame, no parent, -1 is default ID, title, size
frame = wx.Frame(None, -1, "wxGauge Test1", size = (420, 310))
# call the derived class, -1 is default ID
MyPanel(frame,-1)
# show the frame
frame.Show(True)
# start the event loop
app.MainLoop()
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.