python-3.x - 使用 Gauge 实现 ProgressDialog

标签 python-3.x wxpython

你好,我想用仪表实现我自己的 ProgressDialog。我想显示耗时。

另一件事。是否可以修改Loader,使其面向往返而不是原地打转?

使用Python 3.5.2

import wx
import time
class Example(wx.Frame):
    def __init__(self, *args, **kw):
        super(Example, self).__init__(*args, **kw)       
        self.Bind(wx.EVT_TIMER, self.OnTimer)
        self.gspeed = 10
        self.timer = wx.Timer(self)
        self.timer.Start(self.gspeed)        
        self.star = True       
        self.InitUI()

    def InitUI(self):
        """ GUI
        """
        pnl = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)      
        self.btn1 = wx.Button(pnl, wx.ID_OK)
        self.btn2 = wx.Button(pnl, wx.ID_STOP)
        self.text = wx.StaticText(pnl)
        self.count = wx.StaticText(pnl)
        self.Bind(wx.EVT_BUTTON, self.OnOk, self.btn1)
        self.Bind(wx.EVT_BUTTON, self.OnStop, self.btn2)
        self.gauge = wx.Gauge(pnl, size=(250, -1), style = wx.GA_HORIZONTAL)
        hbox1.Add(self.gauge, proportion=1, flag=wx.ALIGN_CENTRE)        
        hbox2.Add(self.btn1, proportion=1, flag=wx.RIGHT, border=10)
        hbox2.Add(self.btn2, proportion=1)
        hbox3.Add(self.text, proportion=1, flag=wx.RIGHT, border=50)
        hbox3.Add(self.count, proportion=1)
        vbox.Add((0, 30))
        vbox.Add(hbox1, flag=wx.ALIGN_CENTRE)
        vbox.Add((0, 20))
        vbox.Add(hbox2, proportion=1, flag=wx.ALIGN_CENTRE)
        vbox.Add(hbox3, proportion=1, flag=wx.ALIGN_CENTRE)
        pnl.SetSizer(vbox)
        self.SetTimeLabel()        
        self.SetTitle('SDA')
        self.Centre()        
    def OnOk(self, e):        
        self.text.SetLabel('Elapsed time')
        self.count.SetLabel("0")

    def OnStop(self, e):
        self.timer.Stop()
        self.text.SetLabel('Task Interrupted')
    def OnTimer(self, e):
        self.gauge.Pulse()        
    def SetTimeLabel(self):
        self.text.SetLabel('Task')        
def main():
    app = wx.App()
    ex = Example(None)
    ex.Show()
    app.MainLoop()
if __name__ == '__main__':
    main() 

我的首要任务是流逝的时间。谢谢

最佳答案

要获取耗时,请从当前时间中减去开始时间。我已将方法 get_elapsed_time 添加到下面的示例中。

import wx
import time


class Example(wx.Frame):
    def __init__(self, *args, **kw):
        super(Example, self).__init__(*args, **kw)
        self.Bind(wx.EVT_TIMER, self.OnTimer)
        self.gspeed = 10
        self.timer = wx.Timer(self)
        self.timer.Start(self.gspeed)
        self.star = True

        self.start_time = time.time()

        self.InitUI()

    def InitUI(self):
        """ GUI
        """
        pnl = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        self.btn1 = wx.Button(pnl, wx.ID_OK)
        self.btn2 = wx.Button(pnl, wx.ID_STOP)
        self.text = wx.StaticText(pnl)
        # self.count = wx.StaticText(pnl)
        self.Bind(wx.EVT_BUTTON, self.OnOk, self.btn1)
        self.Bind(wx.EVT_BUTTON, self.OnStop, self.btn2)
        self.gauge = wx.Gauge(pnl, size=(250, -1), style=wx.GA_HORIZONTAL)
        hbox1.Add(self.gauge, proportion=1, flag=wx.ALIGN_CENTRE)
        hbox2.Add(self.btn1, proportion=1, flag=wx.RIGHT, border=10)
        hbox2.Add(self.btn2, proportion=1)
        hbox3.Add(self.text, proportion=1, flag=wx.RIGHT, border=50)
        # hbox3.Add(self.count, proportion=1)
        vbox.Add((0, 30))
        vbox.Add(hbox1, flag=wx.ALIGN_CENTRE)
        vbox.Add((0, 20))
        vbox.Add(hbox2, proportion=1, flag=wx.ALIGN_CENTRE)
        vbox.Add(hbox3, proportion=1, flag=wx.ALIGN_CENTRE)
        pnl.SetSizer(vbox)
        self.SetTimeLabel()
        self.SetTitle('SDA')
        self.Centre()

        self.Layout()

    def OnOk(self, e):
        self.SetTimeLabel()
        # self.count.SetLabel("0")

    def OnStop(self, e):
        self.timer.Stop()
        self.text.SetLabel('Task Interrupted')

    def OnTimer(self, e):
        self.gauge.Pulse()
        self.SetTimeLabel()

    def get_elapsed_time(self):
        return round(time.time() - self.start_time, 1)

    def SetTimeLabel(self):
        self.text.SetLabel("{elapsed} seconds elapsed".format(elapsed=self.get_elapsed_time()))


def main():
    app = wx.App()
    ex = Example(None)
    ex.Show()
    app.MainLoop()


if __name__ == '__main__':
    main()

关于python-3.x - 使用 Gauge 实现 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58079111/

相关文章:

python - 为什么 python 中的 0.500000 舍入与使用 '%.0f' 的 45.500000 不同?

wxpython - 如何在 wxpython 中重新定位打开的窗口

python - wxpython 的 wxEvent.Skip() 解释

arrays - 从每行的特定列中获取值

macos - 在 OSX "El Capitan"上安装 wxPython 2.8(用于骑行)

python - 一起使用模拟 (MyHDL) 和 wxPython

wxPython 内存泄漏与 setValue

python - 识别与数字相关的词

python - 使用 Django admin 复制模型

python - 使用 if else 逻辑应用函数修改多列