首页 > 解决方案 > wxPython中的静态/非动画进度条

问题描述

我有一个用 wxPython 编写的简单 GUI,我想显示一个静态“进度条”来表示我连接的设备的电池电量。我试过使用wx.Gauge,但不幸的是它有一个动画发光(至少在 Win10 中),正如你在这两个屏幕截图中看到的那样:

在此处输入图像描述 在此处输入图像描述

如您所见,没有太多事情发生:

self.staticBar = wx.Gauge(self, range=10, size=(200,23), style=wx.GA_HORIZONTAL)
self.staticBar.SetValue(5)

我猜这个动画是Win10 UI的一个特性,但是在wx中有没有办法关闭它呢?还是我应该使用不同的课程?我试过寻找彩色丝带/横幅/等(我可能只是不知道正确的术语是什么,这妨碍了我的搜索),我能找到的最接近的东西是StaticBox我用StaticText一个得到这个:

在此处输入图像描述

(最小的工作示例):

import wx

class MainPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        subpanel = wx.Panel(self)

        self.staticBar = wx.StaticBox(self, wx.ID_ANY, label="", size=(200,35))
        self.staticBarFill = wx.StaticText(self.staticBar, wx.ID_ANY, label="", size=(100,19))
        self.staticBarFill.SetBackgroundColour("green")

        subSizer = wx.BoxSizer(wx.VERTICAL)
        subSizer.Add(self.staticBarFill, 0, wx.TOP,11)
        subpanel.SetSizer(subSizer)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.staticBar, 0, wx.ALL, 5)
        sizer.Add(subpanel, 0, wx.LEFT,0)

        self.SetSizer(sizer)

class OuterFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, size=(300,200))
        self.Center() # center gui on screen

        MainPanel(self)

if __name__ == "__main__":
    app = wx.App()
    frame = OuterFrame().Show()
    app.MainLoop()

除了我似乎无法更改StaticText. 我可以调用SetSizeStaticText,它不会抛出错误,但它也不会做任何事情(它也没有在文档中列为方法,所以它可能没有实现?)。

所以基本上,wxPython 中是否有某种非动画“进度条”?如果没有,我如何拼凑类似于进度条/电池电量指示器并且还能够更新/调整大小的东西?

标签: wxpythonprogress-bar

解决方案


除了 Rolf of Saxony 的非常好的回答,您还可以查看:

https://wxpython.org/Phoenix/docs/html/wx.lib.agw.pygauge.PyGauge.html


推荐阅读