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操作列表的常用方法分享
Feb 13 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
快速了解Python中的装饰器
Jan 11 Python
python中virtualenvwrapper安装与使用
May 20 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
python属于哪种语言
Aug 16 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
Python sklearn分类决策树方法详解
Sep 23 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
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
jquery获取radio值实例
2014/10/16 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
Python读写文件方法总结
2015/06/09 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Django缓存系统实现过程解析
2019/08/02 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
银行演讲稿范文
2014/01/03 职场文书
与死神共舞观后感
2015/06/15 职场文书
Python 键盘事件详解
2021/11/11 Python