wxPython 进度条

5 投票
2 回答
8909 浏览
提问于 2025-04-15 16:53

我不能使用 wx.ProgressDialog,因为我需要在对话框里添加额外的内容(比如一个暂停按钮和当前正在处理的信息)。有没有什么控件可以只用来显示进度条,这样我就可以在自己的对话框里使用了?

当然,我可以自己画一个简单的进度条,但因为这个程序需要在 Mac OS X、Windows 和 Linux 上运行,所以如果进度条能有本地的外观会更好。

2 个回答

2

你可以自己创建一个 wx.Dialog 的衍生类,然后使用一个布局管理器(sizer)来添加你需要的控件。

比如说,这是我程序中的一个例子:

class ProgressDialog(wx.Dialog):
    """
    Shows a Progres Gauge while an operation is taking place. May be cancellable
    which is possible when converting pdf/ps
    """
    def __init__(self, gui, title, to_add=1, cancellable=False):
        """Defines a gauge and a timer which updates the gauge."""
        wx.Dialog.__init__(self, gui, title=title,
                          style=wx.CAPTION)
        self.gui = gui
        self.count = 0
        self.to_add = to_add
        self.timer = wx.Timer(self)
        self.gauge = wx.Gauge(self, range=100, size=(180, 30))
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.gauge, 0, wx.ALL, 10)

        if cancellable:
            cancel = wx.Button(self, wx.ID_CANCEL, _("&Cancel"))
            cancel.SetDefault()
            cancel.Bind(wx.EVT_BUTTON, self.on_cancel)
            btnSizer = wx.StdDialogButtonSizer()
            btnSizer.AddButton(cancel)
            btnSizer.Realize()
            sizer.Add(btnSizer, 0, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 10)

        self.SetSizer(sizer)
        sizer.Fit(self)
        self.SetFocus()

        self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
        self.timer.Start(30)


    def on_timer(self, event):
        """Increases the gauge's progress."""
        self.count += self.to_add
        self.gauge.SetValue(self.count)
        if self.count > 100:
            self.count = 0


    def on_cancel(self, event):
        """Cancels the conversion process"""
        # do whatever
6

wxGauge是什么呢?它可以显示一个水平或垂直的进度条。
点击这里查看wxGauge的详细文档

如果你想要更完整的C++文档,可以查看这里:
http://docs.wxwidgets.org/2.6/wx_wxgauge.html#wxgauge

撰写回答