我想在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()
仪表显示正确,带有两个红色标记和蓝色标尺。
然而,当我水平延伸框架时,仪表水平指示器或红色标记都不会刷新以反映新的比例。
有趣的是,如果我关闭并垂直延伸框架,它会用仪表刷新并在正确位置标记。
我做错了什么?这是一个错误吗?
答案 0 :(得分:1)
在Windows上,默认情况下,仅在调整大小时绘制窗口的新曝光区域,其余区域将从更新区域中剪切掉。因此,虽然正在调用onPaint
,但窗口的现有部分将从绘图区域中排除。避免这种情况的最简单方法是在创建窗口小部件时使用wx.FULL_REPAINT_ON_RESIZE
样式,但在某些情况下,您可能需要处理一些额外的闪烁。