首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gauge实现ProgressDialog

使用Gauge实现ProgressDialog
EN

Stack Overflow用户
提问于 2019-09-24 19:18:04
回答 1查看 38关注 0票数 2

您好,我想实现我自己的ProgressDialog与仪表。我想要显示经过的时间。

还有一件事。是否可以修改装载器,使其面向往返,而不是绕着圆圈转?

使用Python 3.5.2

代码语言:javascript
复制
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() 

我优先考虑的是经过的时间。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-24 21:16:05

要获得经过时间,请从当前时间减去开始时间。我已经在下面的示例中添加了get_elapsed_time方法。

代码语言:javascript
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58079111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档