zoukankan      html  css  js  c++  java
  • tkinter事件高级用法实例

    from tkinter import *
    import threading, time
    
    trace = 0 
    
    class CanvasEventsDemo: 
        def __init__(self, parent=None):
            canvas = Canvas(width=300, height=300, bg='beige') 
            canvas.pack()
            canvas.bind('<ButtonPress-1>', self.onStart)      # click
            canvas.bind('<B1-Motion>',     self.onGrow)       # and drag
            canvas.bind('<Double-1>',      self.onClear)      # delete all
            canvas.bind('<ButtonPress-3>', self.onMove)       # move latest
            self.canvas = canvas
            self.drawn  = None
            self.kinds = [canvas.create_oval, canvas.create_rectangle]
            
        def onStart(self, event):
            self.shape = self.kinds[0]
            self.kinds = self.kinds[1:] + self.kinds[:1]      # start dragout
            self.start = event
            self.drawn = None
            
        def onGrow(self, event):                              # delete and redraw
            canvas = event.widget
            if self.drawn: canvas.delete(self.drawn)
            objectId = self.shape(self.start.x, self.start.y, event.x, event.y)
            if trace: print(objectId)
            self.drawn = objectId
            
        def onClear(self, event):
            event.widget.delete('all')                        # use tag all
            
        def onMove(self, event):
            if self.drawn:                                    # move to click spot
                if trace: print(self.drawn)
                canvas = event.widget
                diffX, diffY = (event.x - self.start.x), (event.y - self.start.y)
                canvas.move(self.drawn, diffX, diffY)
                self.start = event
    
        
    class CanvasEventsDemoTags(CanvasEventsDemo):
        def __init__(self, parent=None):
            CanvasEventsDemo.__init__(self, parent)
            self.canvas.create_text(75, 8, text='Press o and r to move shapes')
            self.canvas.master.bind('<KeyPress-o>', self.onMoveOvals)    
            self.canvas.master.bind('<KeyPress-r>', self.onMoveRectangles)  
            self.kinds = self.create_oval_tagged, self.create_rectangle_tagged
            
        def create_oval_tagged(self, x1, y1, x2, y2):
            objectId = self.canvas.create_oval(x1, y1, x2, y2)
            self.canvas.itemconfig(objectId, tag='ovals', fill='blue')
            return objectId
            
        def create_rectangle_tagged(self, x1, y1, x2, y2):
            objectId = self.canvas.create_rectangle(x1, y1, x2, y2)
            self.canvas.itemconfig(objectId, tag='rectangles', fill='red')
            return objectId
            
        def onMoveOvals(self, event):
            print('moving ovals')
            self.moveInSquares(tag='ovals')           # move all tagged ovals
            
        def onMoveRectangles(self, event):
            print('moving rectangles')
            self.moveInSquares(tag='rectangles')
            
        def moveInSquares(self, tag):                 # 5 reps of 4 times per sec
            for i in range(5):
                for (diffx, diffy) in [(+20, 0), (0, +20), (-20, 0), (0, -20)]:
                    self.canvas.move(tag, diffx, diffy)
                    self.canvas.update()              # force screen redraw/update
                    time.sleep(0.25)                  # pause, but don't block gui
    
    
    class CanvasEventsDemoThread(CanvasEventsDemoTags):
        def moveEm(self, tag):
            for i in range(5):
                for (diffx, diffy) in [(+20, 0), (0, +20), (-20, 0), (0, -20)]:
                    self.canvas.move(tag, diffx, diffy)
                    time.sleep(0.25)                      # pause this thread only
                    
        def moveInSquares(self, tag):
            threading.Thread(self.moveEm, (tag,)).start()
    
    if __name__ == '__main__':
        CanvasEventsDemoThread()
        mainloop()
  • 相关阅读:
    音视频入门-06-代码画图时间
    音视频入门-05-RGB-TO-BMP使用开源库
    音视频入门-04-BMP图像四字节对齐的问题
    音视频入门-03-RGB转成BMP图片
    控制input文本框只能输入正整数(H5)
    微信小程序自定义导航栏配置(顶部栏搜索框)
    React-日历组件(原生JS代码)
    package.json文件详解
    解决HTML5IOS拍照上传图片逆时针旋转90度问题(React)
    项目细节
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5188527.html
Copyright © 2011-2022 走看看