如何在同一个框架上设置两个速度表

2024-06-28 19:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码适用于一个速度计。通过修改滑块,指针会自动调整到车速表上相应的值。我在同一帧上创建了第二个速度计和滑块。运行代码时,我只看到两个滑块和2个小点出现-没有速度计。我怎样才能让速度表显示出来?在

提前谢谢。在

import os
import wx.lib.agw.speedmeter as SM
import wx.lib.agw.speedmeter as SM2
import sys
import math


class MyFrame(wx.Frame):

    def __init__(self,parent,id,title):
        # creation frame
        wx.Frame.__init__(self,parent,-1,"test2",size=(1200,1200))

        self.speed = SM.SpeedMeter(self, agwStyle=SM.SM_DRAW_HAND|SM.SM_DRAW_SECTORS|SM.SM_DRAW_MIDDLE_TEXT|SM.SM_DRAW_SECONDARY_TICKS,pos=(15,300),size=(35,-1))

        # Set The Region Of Existence Of SpeedMeter 1
        self.speed.SetAngleRange(-math.pi/6, 7*math.pi/6)

        # SpeedMeter In Sectors
        intervals = range(0, 201, 20)
        self.speed.SetIntervals(intervals)

        # Assign The Same Colours To All Sectors 

        colours = [wx.BLACK]*10
        self.speed.SetIntervalColours(colours)

        # Assign The Ticks
        ticks = [str(interval) for interval in intervals]
        self.speed.SetTicks(ticks)
        # Set The Ticks/Tick Markers Colour
        self.speed.SetTicksColour(wx.YELLOW)
        # We Want To Draw 5 Secondary Ticks Between The Principal Ticks
        self.speed.SetNumberOfSecondaryTicks(5)

        # Set The Font For The Ticks Markers
        self.speed.SetTicksFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL))

        # Set The Text In The Center Of SpeedMeter
        self.speed.SetMiddleText("L")
        # Assign The Colour To The Center Text
        self.speed.SetMiddleTextColour(wx.WHITE)
        # Assign A Font To The Center Text
        self.speed.SetMiddleTextFont(wx.Font(28, wx.SWISS, wx.NORMAL, wx.BOLD))

        # Set The Colour For The Hand Indicator
        self.speed.SetHandColour(wx.Colour(255, 250, 20))

        # Do Not Draw The External (CONTAINER) Arc
        self.speed.DrawExternalArc(False)



        #creation of slider 1
        self.slider=wx.Slider(self,-1,50,0,200,pos=(15,100),size=  (350,-1),style=wx.SL_AUTOTICKS|wx.SL_LABELS)
        self.slider.SetTickFreq(5,1)

        #binding the event of slider change
        self.slider.Bind(wx.EVT_SLIDER,self.sliderUpdate)


        ##############################
        # Second speedmeter


        self.speed2 = SM2.SpeedMeter(self, agwStyle=SM2.SM_DRAW_HAND|SM2.SM_DRAW_SECTORS|SM2.SM_DRAW_MIDDLE_TEXT|SM2.SM_DRAW_SECONDARY_TICKS,pos=(15,30),size=(35,-1))

        # Set The Region Of Existence Of SpeedMeter 2
        self.speed2.SetAngleRange(-math.pi/6, 7*math.pi/6)

        # SpeedMeter In Sectors
        intervals2 = range(0, 201, 20)
        self.speed2.SetIntervals(intervals2)

        # Assign The Same Colours To All Sectors 

        colours2 = [wx.BLACK]*10
        self.speed2.SetIntervalColours(colours2)

        # Assign The Ticks
        ticks2 = [str(interval) for interval in intervals2]
        self.speed2.SetTicks(ticks2)
        # Set The Ticks/Tick Markers Colour
        self.speed2.SetTicksColour(wx.YELLOW)
        # We Want To Draw 5 Secondary Ticks Between The Principal Ticks
        self.speed2.SetNumberOfSecondaryTicks(5)

        # Set The Font For The Ticks Markers
        self.speed2.SetTicksFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL))

        # Set The Text In The Center Of SpeedMeter
        self.speed2.SetMiddleText("Km/h")
        # Assign The Colour To The Center Text
        self.speed2.SetMiddleTextColour(wx.WHITE)
        # Assign A Font To The Center Text
        self.speed2.SetMiddleTextFont(wx.Font(28, wx.SWISS, wx.NORMAL, wx.BOLD))

        # Set The Colour For The Hand Indicator
        self.speed2.SetHandColour(wx.Colour(255, 250, 20))

        # Do Not Draw The External (CONTAINER) Arc
        self.speed2.DrawExternalArc(False)

        #set gauge to initial slider position
        #self.pos=self.slider.GetValue()

        #creation ofslider

        self.slider2=wx.Slider(self,2,50,0,200,pos=(15,415),size=  (350,-1),style=wx.SL_AUTOTICKS|wx.SL_LABELS)
        self.slider2.SetTickFreq(5,1)

        #binding the event of slider change
        self.slider2.Bind(wx.EVT_SLIDER,self.sliderUpdate2)


    def sliderUpdate(self, event):
        #get slider position and set it on speedometer
        self.speed.SetSpeedValue(self.slider.GetValue())

    def sliderUpdate2(self, event):
        #get slider position and set it on speedometer
        self.speed2.SetSpeedValue(self.slider2.GetValue())




if __name__=='__main__' :        
    APP=wx.App(0)

    frame=MyFrame(None,-1,'Test')
    APP.SetTopWindow(frame)
    frame.Show()
    APP.MainLoop() 

Tags: thetoselfsmsliderspeedwxfont
1条回答
网友
1楼 · 发布于 2024-06-28 19:37:14

实例化速度表时,应使用与当前不同的尺寸。
例如,size=(100,100),你会看到你的速度表出现。在

在任何情况下,您可能希望使用sizer来定位小部件并使它们与框架一起展开或压缩,而不是使用possize的静态定位

相关问题 更多 >