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的ORM框架SQLAlchemy入门教程
Apr 28 Python
Python实现读取文件最后n行的方法
Feb 23 Python
详解Python中类的定义与使用
Apr 11 Python
浅谈Python的list中的选取范围
Nov 12 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
Python ConfigParser模块的使用示例
Oct 12 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
Python项目打包成二进制的方法
Dec 30 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
php session处理的定制
2009/03/16 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
jquery改变tr背景色的示例代码
2013/12/28 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
用python生成1000个txt文件的方法
2018/10/25 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Django 开发环境配置过程详解
2019/07/18 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
python怎么自定义捕获错误
2020/06/29 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
大三毕业自我鉴定
2014/01/15 职场文书
广告词串烧
2014/03/19 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python
基于flask实现五子棋小游戏
2021/05/25 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL