Python tkinter事件高级用法实例


Posted in Python onJanuary 31, 2018

本文实例讲述了Python tkinter事件高级用法。分享给大家供大家参考,具体如下:

先来看看运行效果:

Python tkinter事件高级用法实例

完整实例代码:

# -*- coding:utf-8-*-
#! python3
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(100, 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()

更多关于Python相关内容可查看本站专题:《Python数学运算技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python简单连接MongoDB数据库的方法
Mar 15 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
分享8个非常流行的 Python 可视化工具包
Jun 05 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
最新pycharm安装教程
Nov 18 Python
Python如何识别银行卡卡号?
Jun 10 Python
python flappy bird小游戏分步实现流程
Feb 15 Python
pyqt5自定义信号实例解析
Jan 31 #Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 #Python
pyqt5简介及安装方法介绍
Jan 31 #Python
Python实现的圆形绘制(画圆)示例
Jan 31 #Python
Python Json序列化与反序列化的示例
Jan 31 #Python
Python实现JSON反序列化类对象的示例
Jan 31 #Python
python删除过期log文件操作实例解析
Jan 31 #Python
You might like
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Python中字符串的格式化方法小结
2016/05/03 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
flask实现验证码并验证功能
2019/12/05 Python
详解KMP算法以及python如何实现
2020/09/18 Python
村委会主任先进事迹
2014/01/15 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
财务主管岗位职责
2014/02/28 职场文书
办公室主任职责范本
2014/03/07 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
经营理念标语
2014/06/21 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
春秋淹城导游词
2015/02/11 职场文书