wxpython中的双值计

时间:2011-06-16 10:58:49

标签: python wxpython

有没有人知道wxPython中的双值仪表?我想显示已选择的一组数据的范围,我有测量仪的最大值和最小值,然后我想突出显示两个值之间的仪表区域。正常的wx.Gauge从仪表最小值(总是仪表底部)突出显示到设定值。

由于

1 个答案:

答案 0 :(得分:1)

我不知道任何带有wx.Gauge外观的内置小部件可以做你正在寻找的东西。

具有不同外观的一个选项是RulerCtrl,它可以为您提供两个价值指标,其中包含您想要的任何范围。它只需要一些额外的工作来适应它,因为并非所有的属性都在列出的方法中暴露。快速举例:

import wx
import wx.lib.agw.rulerctrl as rc

class MinMax(rc.RulerCtrl):
    def __init__(self, parent, range_min, range_max, orient=wx.HORIZONTAL):
        rc.RulerCtrl.__init__(self, parent, orient)

        self.SetRange(range_min, range_max)
        self.LabelMinor(False)
        self.range_min = range_min
        self.range_max = range_max

        self.AddIndicator(wx.NewId(), range_min)
        self.AddIndicator(wx.NewId(), range_max)

        self.Bind(rc.EVT_INDICATOR_CHANGING, self.OnIndicatorChanging)

    def GetMinIndicatorValue(self):
        return self._indicators[0]._value

    def GetMaxIndicatorValue(self):
        return self._indicators[1]._value

    def SetMinIndicatorValue(self, value):
        # Value must be within range and <= Max indicator value.
        if value < self.range_min or value > self.GetMaxIndicatorValue():
            raise ValueError('Out of bounds!')
        self._indicators[0]._value=value
        self.Refresh()

    def SetMaxIndicatorValue(self, value):
        # Value must be within range and >= Min indicator value.
        if value > self.range_max or value < self.GetMinIndicatorValue():
            raise ValueError('Out of bounds!')
        self._indicators[1]._value=value
        self.Refresh()

    def OnIndicatorChanging(self, evt):
        # Eat the event so the user can't change values manually.
        # Do some validation here and evt.Skip() if you want to allow it.
        # Related: EVT_INDICATOR_CHANGED
        pass


class MainWindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)

        self.minmax = MinMax(self, 0, 100)
        self.minmax.SetSpacing(20)
        self.minmax.SetMinIndicatorValue(30)
        self.minmax.SetMaxIndicatorValue(84)
        self.Show()

app = wx.App(redirect=False) 
frame = MainWindow(None, wx.ID_ANY, "Range Indicator") 
app.MainLoop()