[파이썬] wxPython `wx.Gauge`: 진행바

In this blog post, we will explore how to use the wx.Gauge widget in wxPython to create a progress bar (진행바) in Python. A progress bar is a visual representation of the progress of a task or operation, providing an indicator of how much work has been completed. The wx.Gauge widget allows us to create such progress bars in our wxPython applications.

Installation

Before we dive into coding, make sure you have wxPython installed. If not, you can install it using pip:

pip install wxPython

Creating a wx.Gauge

To create a wx.Gauge widget, we first need to create an instance of the wx.Frame class, which will serve as the main window of our application. We can then add the wx.Gauge widget to this frame.

Here’s an example of creating a wx.Gauge widget and setting its initial value:

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Progress Bar Example")
        
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        
        gauge = wx.Gauge(panel, range=100)
        gauge.SetValue(0)  # Set initial value
        
        sizer.Add(gauge, 0, wx.EXPAND | wx.ALL, 20)
        
        panel.SetSizerAndFit(sizer)
        self.Fit()
        
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()

In the code above, we create a MyFrame class that inherits from wx.Frame. We create a panel and a sizer to organize the widgets within the frame. We then create an instance of wx.Gauge and add it to the sizer. Finally, we set the sizer for the panel and call Fit() to resize the frame to fit the gauge.

Updating the wx.Gauge

To update the progress of the wx.Gauge, we can use the SetValue() method. This method takes an integer value between the minimum and maximum values specified by the range parameter. By repeatedly calling SetValue() with a different value, we can visually represent the progress of a task.

Here’s an example of how to update the wx.Gauge in response to a button click event:

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Progress Bar Example")
        
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        
        self.gauge = wx.Gauge(panel, range=100)
        self.gauge.SetValue(0)  # Set initial value
        
        button = wx.Button(panel, label="Start", size=(100, 30))
        button.Bind(wx.EVT_BUTTON, self.on_button_click)
        
        sizer.Add(self.gauge, 0, wx.EXPAND | wx.ALL, 20)
        sizer.Add(button, 0, wx.ALIGN_CENTER)
        
        panel.SetSizerAndFit(sizer)
        self.Fit()
        
    def on_button_click(self, event):
        self.update_gauge()
        
    def update_gauge(self):
        for i in range(101):
            self.gauge.SetValue(i)
            wx.MilliSleep(100)  # Delay between updates
        
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()

In the code above, we add a button to the frame and bind a method on_button_click() to its click event. When the button is clicked, we call the update_gauge() method, which iteratively updates the value of the wx.Gauge by calling SetValue() in a loop. We also add a small delay between each update using wx.MilliSleep() to simulate the progress of a task.

That’s it! You now have a basic understanding of how to use the wx.Gauge widget to create a progress bar in wxPython. Feel free to explore more features and customization options provided by the wx.Gauge widget in the official wxPython documentation.