⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floatcanvas.py

📁 用wxPython编写GUI程序的样例代码
💻 PY
📖 第 1 页 / 共 5 页
字号:
            wx.GetApp().Yield(True)

            Range = (-10,10)
            colors = self.colors

            self.BindAllMouseEvents()
            Canvas = self.Canvas

            Canvas.InitAll()
            #            
            ## these set the limits for how much you can zoom in and out
            Canvas.MinScale = 14
            Canvas.MaxScale = 500
            

            ############# Random tests of everything ##############

            # Rectangles
            for i in range(3):
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                lw = random.randint(1,5)
                cf = random.randint(0,len(colors)-1)
                wh = (random.randint(1,5), random.randint(1,5))
                Canvas.AddRectangle(xy, wh, LineWidth = lw, FillColor = colors[cf])

            # Ellipses
            for i in range(3):
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                lw = random.randint(1,5)
                cf = random.randint(0,len(colors)-1)
                h = random.randint(1,5)
                w = random.randint(1,5)
                Canvas.AddEllipse(xy, (h,w), LineWidth = lw,FillColor = colors[cf])

            # Points
            for i in range(5):
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                D = random.randint(1,50)
                cf = random.randint(0,len(colors)-1)
                Canvas.AddPoint(xy, Color = colors[cf], Diameter = D)

            # SquarePoints
            for i in range(500):
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                S = random.randint(1, 50)
                cf = random.randint(0,len(colors)-1)
                Canvas.AddSquarePoint(xy, Color = colors[cf], Size = S)

            # Circles
            for i in range(5):
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                D = random.randint(1,5)
                lw = random.randint(1,5)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddCircle(xy, D, LineWidth = lw, LineColor = colors[cl], FillColor = colors[cf])
                Canvas.AddText("Circle # %i"%(i), xy, Size = 12, BackgroundColor = None, Position = "cc")
            # Lines
            for i in range(5):
                points = []
                for j in range(random.randint(2,10)):
                    point = (random.randint(Range[0],Range[1]),random.randint(Range[0],Range[1]))
                    points.append(point)
                lw = random.randint(1,10)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddLine(points, LineWidth = lw, LineColor = colors[cl])
            # Polygons
            for i in range(3):
                points = []
                for j in range(random.randint(2,6)):
                    point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                    points.append(point)
                lw = random.randint(1,6)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddPolygon(points,
                                       LineWidth = lw,
                                       LineColor = colors[cl],
                                       FillColor = colors[cf],
                                       FillStyle = 'Solid')

            ## Pointset
            for i in range(4):
                points = []
                points = RandomArray.uniform(Range[0],Range[1],(100,2))
                cf = random.randint(0,len(colors)-1)
                D = random.randint(1,4)
                Canvas.AddPointSet(points, Color = colors[cf], Diameter = D)

            # Text
            String = "Unscaled text"
            for i in range(3):
                ts = random.randint(10,40)
                cf = random.randint(0,len(colors)-1)
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                Canvas.AddText(String, xy, Size = ts, Color = colors[cf], Position = "cc")

            # Scaled Text
            String = "Scaled text"
            for i in range(3):
                ts = random.random()*3 + 0.2
                cf = random.randint(0,len(colors)-1)
                Point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                Canvas.AddScaledText(String, Point, Size = ts, Color = colors[cf], Position = "cc")

            # Arrows
            N = 5
            Points = RandomArray.uniform(Range[0], Range[1], (N,2) )
            for i in range(N):
                Canvas.AddArrow(Points[i],
                                random.uniform(20,100),
                                Direction = random.uniform(0,360),
                                LineWidth = random.uniform(1,5),
                                LineColor = colors[random.randint(0,len(colors)-1)],
                                ArrowHeadAngle = random.uniform(20,90))

            # ArrowLines
            for i in range(5):
                points = []
                for j in range(random.randint(2,10)):
                    point = (random.randint(Range[0],Range[1]),random.randint(Range[0],Range[1]))
                    points.append(point)
                lw = random.randint(1,10)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddArrowLine(points, LineWidth = lw, LineColor = colors[cl], ArrowHeadSize= 16)


            Canvas.ZoomToBB()

        def TestAnimation(self,event=None):
            """

            In this test, a relatively complex background is drawn, and
            a simple object placed in the foreground is moved over
            it. This demonstrates how to use the InForeground attribute
            to make an object in the foregorund draw fast, without
            having to re-draw the whole background.

            """
            wx.GetApp().Yield(True)
            Range = (-10,10)
            self.Range = Range

            self.UnBindAllMouseEvents()
            Canvas = self.Canvas
            Canvas.InitAll()

            ##		Random tests of everything:
            colors = self.colors
            # Rectangles
            for i in range(3):
                xy = (random.uniform(Range[0],Range[1]), random.uniform(Range[0],Range[1]))
                lw = random.randint(1,5)
                cf = random.randint(0,len(colors)-1)
                wh = (random.randint(1,5), random.randint(1,5) )
                Canvas.AddRectangle(xy, wh, LineWidth = lw, FillColor = colors[cf])

            # Ellipses
            for i in range(3):
                xy = (random.uniform(Range[0],Range[1]), random.uniform(Range[0],Range[1]))
                lw = random.randint(1,5)
                cf = random.randint(0,len(colors)-1)
                wh = (random.randint(1,5), random.randint(1,5) )
                Canvas.AddEllipse(xy, wh, LineWidth = lw, FillColor = colors[cf])

            # Circles
            for i in range(5):
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                D = random.randint(1,5)
                lw = random.randint(1,5)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddCircle(xy, D, LineWidth = lw, LineColor = colors[cl], FillColor = colors[cf])
                Canvas.AddText("Circle # %i"%(i), xy, Size = 12, BackgroundColor = None, Position = "cc")

            # Lines
            for i in range(5):
                points = []
                for j in range(random.randint(2,10)):
                    point = (random.randint(Range[0],Range[1]),random.randint(Range[0],Range[1]))
                    points.append(point)
                lw = random.randint(1,10)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddLine(points, LineWidth = lw, LineColor = colors[cl])

            # Polygons
            for i in range(3):
                points = []
                for j in range(random.randint(2,6)):
                    point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                    points.append(point)
                lw = random.randint(1,6)
                cf = random.randint(0,len(colors)-1)
                cl = random.randint(0,len(colors)-1)
                Canvas.AddPolygon(points,
                                       LineWidth = lw,
                                       LineColor = colors[cl],
                                       FillColor = colors[cf],
                                       FillStyle = 'Solid')

            # Scaled Text
            String = "Scaled text"
            for i in range(3):
                ts = random.random()*3 + 0.2
                cf = random.randint(0,len(colors)-1)
                xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
                Canvas.AddScaledText(String, xy, Size = ts, Color = colors[cf], Position = "cc")


            # Now the Foreground Object:
            C = Canvas.AddCircle((0,0), 7, LineWidth = 2,LineColor = "Black",FillColor = "Red", InForeground = True)
            T = Canvas.AddScaledText("Click to Move", (0,0), Size = 0.6, Position = 'cc', InForeground = True)
            C.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.MoveMe)
            C.Text = T

            self.Timer = wx.PyTimer(self.ShowFrame)
            self.FrameDelay = 50 # milliseconds

            Canvas.ZoomToBB()

        def ShowFrame(self):
            Object = self.MovingObject
            Range = self.Range
            if  self.TimeStep < self.NumTimeSteps:
                x,y = Object.XY
                if x > Range[1] or x < Range[0]:
                    self.dx = -self.dx
                if y > Range[1] or y < Range[0]:
                    self.dy = -self.dy
                Object.Move( (self.dx,self.dy) )
                Object.Text.Move( (self.dx,self.dy))
                self.Canvas.Draw()
                self.TimeStep += 1
                wx.GetApp().Yield(True)
            else:
                self.Timer.Stop()


        def MoveMe(self, Object):
            self.MovingObject = Object
            Range = self.Range
            self.dx = random.uniform(Range[0]/4,Range[1]/4)
            self.dy = random.uniform(Range[0]/4,Range[1]/4)
            #import time
            #start = time.time()
            self.NumTimeSteps = 200
            self.TimeStep = 1
            self.Timer.Start(self.FrameDelay)
            #print "Did %i frames in %f seconds"%(N, (time.time() - start) )

        def TestHitTest(self, event=None):
            wx.GetApp().Yield(True)

            self.UnBindAllMouseEvents()
            Canvas = self.Canvas

            Canvas.InitAll()

            #Add a Hit-able rectangle
            w, h = 60, 20

            dx = 80
            dy = 40
            x, y = 20, 20
            FontSize = 10

            #Add one that is not HitAble
            Canvas.AddRectangle((x,y), (w, h), LineWidth = 2)
            Canvas.AddText("Not Hit-able", (x,y), Size = FontSize, Position = "bl")


            x += dx
            R = Canvas.AddRectangle((x, y), (w, h), LineWidth = 2)
            R.Name = "Line Rectangle"
            R.HitFill = False
            R.HitLineWidth = 5 # Makes it a little easier to hit
            R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHit)
            Canvas.AddText("Left Click Line", (x,y), Size = FontSize, Position = "bl")
            Canvas.AddText(R.Name, (x, y+h), Size = FontSize, Position = "tl")

            x += dx
            color = "Red"
            R = Canvas.AddRectangle((x, y), (w, h), LineWidth = 2, FillColor = color)
            R.Name = color + "Rectangle"
            R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHit)
            Canvas.AddText("Left Click Fill", (x, y), Size = FontSize, Position = "bl")
            Canvas.AddText(R.Name, (x, y+h), Size = FontSize, Position = "tl")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -