Changing middleText of Speedometer

Tanmay Agrawal <[email protected]> Mon, 29 Aug 2022 10:34:47 +0530
Newsgroups gmane.comp.python.wxglade
Message-ID <CALF8AQPVPaL_zJGq0+EnD+gxnz-bfnKrt6K2L9mpPiNMO-QPhw@mail.gmail.com>
Hi,
I'm trying to change the Value of the MiddleText of the speedometer to the
value that the tick of the speedometer points to.
I am changing the value of the tick of the speedometer via SetSpeedalue,
but when I try to change the middleText via SetMiddleText(), the tick mark
disappears, and no value is shown in the middle.

What can I do to solve this issue?
Attaching the code for your reference. (In the code, I have used an OnMouse
function for testing, but actually the value of Speedometer is changed via
some other data.)

Thanks
Regards,
Tanmay

_______________________________________________
wxGlade-general mailing list
wxGlade-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/wxglade-general
test.py (text/x-python, 2.9 KB)
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# generated by wxGlade 0.8.0a9 on Mon Nov 20 23:05:27 2017
#

import wx

# begin wxGlade: dependencies
# end wxGlade

# begin wxGlade: extracode
import wx.lib.agw.speedmeter as SM

# import these on module level to use them in the Extra Properties
from math import pi, sqrt
# end wxGlade


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((400, 349))
        self.SetTitle("wx.lib.agw.speedmeter example")
        
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        
        self.panel_1 = wx.Panel(self, wx.ID_ANY)
        sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        
        self.speed_meter = SM.SpeedMeter(self.panel_1, wx.ID_ANY, agwStyle=SM.SM_DRAW_HAND | SM.SM_DRAW_SECTORS | SM.SM_DRAW_MIDDLE_TEXT | SM.SM_DRAW_SECONDARY_TICKS)
        # see also extra properties
        
        intervals = list(range(0, 201, 20))
        self.speed_meter.SetIntervals(intervals)
        
        self.speed_meter.SetIntervalColours([wx.BLACK]*10)
        
        ticks = [str(interval) for interval in intervals]
        self.speed_meter.SetTicks(ticks)
        
        self.speed_meter.DrawExternalArc(False)
        #################################################################
        self.speed_meter.SetAngleRange(-pi/6, 7*pi/6)
        self.speed_meter.SetHandColour(wx.Colour(255, 50, 0))
        self.speed_meter.SetIntervalColours([wx.BLACK]*10)
        self.speed_meter.SetMiddleText("Km/h")
        self.speed_meter.SetMiddleTextColour(wx.WHITE)
        self.speed_meter.SetMiddleTextFont(wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))
        self.speed_meter.SetSpeedValue(44)
        self.speed_meter.SetTicksColour(wx.WHITE)
        self.speed_meter.SetTicksFont(wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
        sizer_2.Add(self.speed_meter, 1, wx.ALL | wx.EXPAND, 3)
        self.speed_meter.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)
        self.speed_meter.SetToolTip(wx.ToolTip("Drag the speed dial to change the speed!"))
        
        
        self.panel_1.SetSizer(sizer_2)
        
        self.SetSizer(sizer_1)
        
        self.Layout()
        # end wxGlade
    def OnMouse(self, event):
        speed = event.GetEventObject()
        self.speed_meter.SetMiddleText(speed.GetSpeedValue())
        event.Skip()



# end of class MyFrame

class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, wx.ID_ANY, "")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True

# end of class MyApp

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()