I have a probably simple problem, but already spent two days unable to solve it.
here is my code: (not the nicest, I know)
#-----------------------------------------------------------------------------------------------------------------------------
#!/usr/bin/env python
import wx
import time
from math import pi
try:
from agw import speedmeter as SM
except ImportError: # if it's not there locally, try the wxPython lib.
import wx.lib.agw.speedmeter as SM
pressure1 = 0
pressure2 = 20
pressure3 = 60
pressure4 = 140
pressure5 = 35
pressure6 = 110
pressure7 = 45
pressure8 = 33
#----------------------------------------------------------------------
####### Beginning Of SPEEDMETER Demo wxPython Code
#----------------------------------------------------------------------
class SpeedMeterDemo(wx.Panel):
def __init__(self, parent):
global pressure1
global pressure2
global pressure3
global pressure4
global pressure5
global pressure6
global pressure7
global pressure8
wx.Panel.__init__(self, parent) #, style=wx.TAB_TRAVERSAL|wx.NO_FULL_REPAINT_ON_RESIZE)
panel = wx.Panel(self, -1, size=(1000,1000))
sizer = wx.FlexGridSizer(rows=2, cols=4, vgap=5, hgap=5)
# 6 Panels To Hold The SpeedMeters ;-)
panel1 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel2 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel3 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel4 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel5 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel6 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel7 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
panel8 = wx.Panel(panel, -1, style=wx.SUNKEN_BORDER)
self.SpeedWindow1 = self.SpeedMeterX(panel1)
self.SpeedWindow2 = self.SpeedMeterX(panel2)
self.SpeedWindow3 = self.SpeedMeterX(panel3)
self.SpeedWindow4 = self.SpeedMeterX(panel4)
self.SpeedWindow5 = self.SpeedMeterX(panel5)
self.SpeedWindow6 = self.SpeedMeterX(panel6)
self.SpeedWindow7 = self.SpeedMeterX(panel7)
self.SpeedWindow8 = self.SpeedMeterX(panel8)
#-----------------------------------------------------------------------------------------------------------------
bsizer1 = wx.BoxSizer(wx.VERTICAL)
bsizer1.Add(self.SpeedWindow1, 1, wx.EXPAND)
panel1.SetSizer(bsizer1)
#-----------------------------------------------------------------------------------------------------------------
bsizer2 = wx.BoxSizer(wx.VERTICAL)
bsizer2.Add(self.SpeedWindow2, 1, wx.EXPAND)
panel2.SetSizer(bsizer2)
#-----------------------------------------------------------------------------------------------------------------
bsizer3 = wx.BoxSizer(wx.VERTICAL)
bsizer3.Add(self.SpeedWindow3, 1, wx.EXPAND)
panel3.SetSizer(bsizer3)
#-----------------------------------------------------------------------------------------------------------------
bsizer4 = wx.BoxSizer(wx.VERTICAL)
bsizer4.Add(self.SpeedWindow4, 1, wx.EXPAND)
panel4.SetSizer(bsizer4)
#-----------------------------------------------------------------------------------------------------------------
bsizer5 = wx.BoxSizer(wx.VERTICAL)
bsizer5.Add(self.SpeedWindow5, 1, wx.EXPAND)
panel5.SetSizer(bsizer5)
#-----------------------------------------------------------------------------------------------------------------
bsizer6 = wx.BoxSizer(wx.VERTICAL)
bsizer6.Add(self.SpeedWindow6, 1, wx.EXPAND)
panel6.SetSizer(bsizer6)
#-----------------------------------------------------------------------------------------------------------------
bsizer7 = wx.BoxSizer(wx.VERTICAL)
bsizer7.Add(self.SpeedWindow7, 1, wx.EXPAND)
panel7.SetSizer(bsizer7)
#-----------------------------------------------------------------------------------------------------------------
bsizer8 = wx.BoxSizer(wx.VERTICAL)
bsizer8.Add(self.SpeedWindow8, 1, wx.EXPAND)
panel8.SetSizer(bsizer8)
sizer.Add(panel1, 1, wx.EXPAND)
sizer.Add(panel2, 1, wx.EXPAND)
sizer.Add(panel3, 1, wx.EXPAND)
sizer.Add(panel4, 1, wx.EXPAND)
sizer.Add(panel5, 1, wx.EXPAND)
sizer.Add(panel6, 1, wx.EXPAND)
sizer.Add(panel7, 1, wx.EXPAND)
sizer.Add(panel8, 1, wx.EXPAND)
sizer.AddGrowableRow(0)
sizer.AddGrowableRow(1)
sizer.AddGrowableCol(0)
sizer.AddGrowableCol(1)
sizer.AddGrowableCol(2)
sizer.AddGrowableCol(3) #sky59
panel.SetSizer(sizer)
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(panel, 1, wx.EXPAND)
self.SetSizer(mainSizer)
mainSizer.Layout()
self.SpeedWindow1.SetSpeedValue(pressure1)
self.SpeedWindow2.SetSpeedValue(pressure2)
self.SpeedWindow3.SetSpeedValue(pressure3)
self.SpeedWindow4.SetSpeedValue(pressure4)
self.SpeedWindow5.SetSpeedValue(pressure5)
self.SpeedWindow6.SetSpeedValue(pressure6)
self.SpeedWindow7.SetSpeedValue(pressure7)
self.SpeedWindow8.SetSpeedValue(pressure8)
self.on_timer()
def SpeedMeterX(self,panel_x):
# First SpeedMeter: We Use The Following Styles:
#
# SM_DRAW_HAND: We Want To Draw The Hand (Arrow) Indicator
# SM_DRAW_SECTORS: Full Sectors Will Be Drawn, To Indicate Different Intervals
# SM_DRAW_MIDDLE_TEXT: We Draw Some Text In The Center Of SpeedMeter
# SM_DRAW_SECONDARY_TICKS: We Draw Secondary (Intermediate) Ticks Between
# The Main Ticks (Intervals)
SpeedWindow_x = SM.SpeedMeter(panel_x,
agwStyle=SM.SM_DRAW_HAND |
SM.SM_DRAW_SECTORS |
SM.SM_DRAW_MIDDLE_TEXT |
SM.SM_DRAW_SECONDARY_TICKS
)
# Set The Region Of Existence Of SpeedMeter (Always In Radians!!!!)
SpeedWindow_x.SetAngleRange(-pi/6, 7*pi/6)
# Create The Intervals That Will Divide Our SpeedMeter In Sectors
intervals = range(0, 201, 20)
SpeedWindow_x.SetIntervals(intervals)
# Assign The Same Colours To All Sectors (We Simulate A Car Control For Speed)
# Usually This Is Black
colours = [wx.BLACK]*10
SpeedWindow_x.SetIntervalColours(colours)
# Assign The Ticks: Here They Are Simply The String Equivalent Of The Intervals
ticks = [str(interval) for interval in intervals]
SpeedWindow_x.SetTicks(ticks)
# Set The Ticks/Tick Markers Colour
SpeedWindow_x.SetTicksColour(wx.WHITE)
# We Want To Draw 5 Secondary Ticks Between The Principal Ticks
SpeedWindow_x.SetNumberOfSecondaryTicks(5)
# Set The Font For The Ticks Markers
SpeedWindow_x.SetTicksFont(wx.Font(7, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
# Set The Text In The Center Of SpeedMeter
SpeedWindow_x.SetMiddleText("kPa")
# Assign The Colour To The Center Text
SpeedWindow_x.SetMiddleTextColour(wx.WHITE)
# Assign A Font To The Center Text
SpeedWindow_x.SetMiddleTextFont(wx.Font(15, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))
# Set The Colour For The Hand Indicator
SpeedWindow_x.SetHandColour(wx.Colour(255, 50, 0))
# Do Not Draw The External (Container) Arc. Drawing The External Arc May
# Sometimes Create Uglier Controls. Try To Comment This Line And See It
# For Yourself!
SpeedWindow_x.DrawExternalArc(False)
# Set The Current Value For The SpeedMeter
SpeedWindow_x.SetSpeedValue(0)
return SpeedWindow_x
def OnInit(self):
frame = wx.Frame(None, -1, "MojTest: " ,style=wx.SYSTEM_MENU | wx.RESIZE_BORDER)
frame.Show(True)
frame.SetSize((480, 320))
frame.SetPosition((0,0))
SpeedMeterDemo(frame)
def on_timer(self):
global pressure1
global pressure2
global pressure3
global pressure4
global pressure5
global pressure6
global pressure7
global pressure8
#--------------------------------------------
if pressure1 < 180:
pressure1 = pressure1 + 3
else:
pressure1 = 0
self.SpeedWindow1.SetSpeedValue(pressure1)
#--------------------------------------------
if pressure2 < 180:
pressure2 = pressure2 + 6
else:
pressure2 = 0
self.SpeedWindow2.SetSpeedValue(pressure2)
#--------------------------------------------
if pressure3 < 180:
pressure3 = pressure3 + 9
else:
pressure3 = 0
self.SpeedWindow3.SetSpeedValue(pressure3)
#--------------------------------------------
if pressure4 < 180:
pressure4 = pressure4 + 12
else:
pressure4 = 0
self.SpeedWindow4.SetSpeedValue(pressure4)
#--------------------------------------------
if pressure5 < 180:
pressure5 = pressure5 + 15
else:
pressure5 = 0
self.SpeedWindow5.SetSpeedValue(pressure5)
#--------------------------------------------
if pressure6 < 180:
pressure6 = pressure6 + 18
else:
pressure6 = 0
self.SpeedWindow6.SetSpeedValue(pressure6)
#--------------------------------------------
if pressure7 < 170:
pressure7 = pressure7 + 21
else:
pressure7 = 0
self.SpeedWindow7.SetSpeedValue(pressure7)
#--------------------------------------------
if pressure8 < 170:
pressure8 = pressure8 + 24
else:
pressure8 = 0
self.SpeedWindow8.SetSpeedValue(pressure8)
self.Update()
wx.CallLater(200, self.on_timer)
app = wx.App(False) #ak true tak vypisuje do okna tie suradnice
SpeedMeterDemo.OnInit(None)
app.MainLoop()
#--------------------------------------------------------------------------------------------------------------
problem is, my eight instruments are not shown
if I “shake” window, they suddenly appear (I know they run already but invisible)
if I remove wx.RESIZE_BORDER flag, then I can not shake window
if I have/add wx.CAPTION or wx.CLOSE_BOX then instruments are visible but also menu bar space is there which I do not want
where I make mistake? something is missing? Thanx for help!!