wxPython 测量仪问题(跳过)

1 投票
3 回答
1480 浏览
提问于 2025-04-15 13:24

Pastebin链接:http://pastebin.com/f40ae1bcf

问题是:我创建了一个wx.Gauge,范围设置为50。然后我写了一个函数,当程序空闲时更新这个进度条的值。当进度条填充到大约50%时,它会突然变空,过一段时间才会显示内容。实际上,当它这样做时,值是50,我觉得当值是50的时候,进度条应该是满的。

为什么会这样呢?我还尝试用wx.Timer来代替绑定wx.EVT_IDLE,但也没有成功。

3 个回答

0

你确定你发的代码就是让你遇到问题的那段代码吗?这段代码看起来跟wxPython的示例代码很像,在我这台电脑上运行得很好,没有问题。

如果你真的把你的进度条(gauge)的值设置成了50,那可能就是问题所在。你需要确保不要超过wx.Gauge的范围。如果范围是50,那么你能设置的最高值就是49。

0

经过更多的测试,我发现我必须把范围调整到2个单位,才能在仪表完全满的时候显示出来。在Windows Vista上似乎没有问题。那么在Linux或Mac上会有问题吗?

2

有几点需要说明。

  • 我在我的iMac上无法重现这个问题,它可以正常运行到满格。使用的是Python 2.5.4和wxPython 2.8.9.2。
  • 空闲事件可能会在奇怪的时刻出现。你可以在你的空闲处理函数里加上print event,这样可以看到这些事件到底是什么时候发生的。使用定时器可能是最好的选择。你的进度条是移动得很快还是在闪烁呢?
  • 你也可以尝试调用gauge.Update()来强制重新绘制进度条。
  • 我通常把进度条的上限设为100,或许你也可以试试这个。

比起定时器,还有一种更简单的方法:

import wx

class GaugeFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Gauge example",
                          size=(350, 150))
        panel = wx.Panel(self, -1)
        self.count = 0
        self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25))
        self.update_gauge()

    def update_gauge(self):
        self.count = self.count + 1
        if self.count >= 50:
            self.count = 0
        self.gauge.SetValue(self.count)
        wx.CallLater(100, self.update_gauge)

app = wx.PySimpleApp()
GaugeFrame().Show()
app.MainLoop()

撰写回答