PyGauge(wxPython Phoenyx)不随Frame扩展

时间:2017-12-02 13:40:43

标签: python-3.x wxpython wxpython-phoenix

我想在wx.pyGauge中添加一对或多个标记,以表示最小,最大自定义限制 这是代码:

import wx
from wx.lib.agw.pygauge import PyGauge as PG
#
#
class AFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.gauge = GaugeBar(self)
        p1 = wx.Panel(self)
        p2 = wx.Panel(self)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(p1, 1, wx.EXPAND)
        self.sizer.Add(self.gauge, 0, wx.EXPAND)
        self.sizer.Add(p2, 1, wx.EXPAND)
        self.SetSizer(self.sizer)

        self.Fit()
        self.SetSize((400, 100))


class GaugeBar(PG):
    def __init__(self, parent, size=(-1, 20)):
        self.range_width = 14
        self.limit_min, self.limit_max = (3, 8)
        #
        PG.__init__(self, parent, -1, self.range_width, size, style=wx.GA_HORIZONTAL)
        #
        self.SetBackgroundColour('yellow')
        self.SetForegroundColour('red')
        #
        self.Bind(wx.EVT_PAINT, self.onPaint)
    #
    def onPaint(self, evt):
        dc = wx.PaintDC(self)
        dc.Clear()
        PG.OnPaint(self, evt)
        #
        w, h = dc.GetSize()
        #
        xmin = self.limit_min * w / self.range_width
        xmax = self.limit_max * w / self.range_width
        #
        dc.DrawText('|', xmin, -8)
        dc.DrawText('|', xmin, 10)
        dc.DrawText('|', xmax, -8)
        dc.DrawText('|', xmax, 10)

#
if __name__ == '__main__':

    app = wx.App()
    a_frame = AFrame(None)
    a_frame.gauge.SetValue(10)
    a_frame.Show()
    app.MainLoop()

仪表显示正确,带有两个红色标记和蓝色标尺。

然而,当我水平延伸框架时,仪表水平指示器或红色标记都不会刷新以反映新的比例。

有趣的是,如果我关闭并垂直延伸框架,它会用仪表刷新并在正确位置标记。

enter image description here

我做错了什么?这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

在Windows上,默认情况下,仅在调整大小时绘制窗口的新曝光区域,其余区域将从更新区域中剪切掉。因此,虽然正在调用onPaint,但窗口的现有部分将从绘图区域中排除。避免这种情况的最简单方法是在创建窗口小部件时使用wx.FULL_REPAINT_ON_RESIZE样式,但在某些情况下,您可能需要处理一些额外的闪烁。