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中的tuple元组详细介绍
Feb 02 Python
Python线程的两种编程方式
Apr 14 Python
python实现网站的模拟登录
Jan 04 Python
想学python 这5本书籍你必看!
Dec 11 Python
python爬虫获取百度首页内容教学
Dec 23 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
python制作图片缩略图
Apr 30 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
TensorFlow tensor的拼接实例
Jan 19 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 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
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
Python通过future处理并发问题
2017/10/17 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
学python安装的软件总结
2019/10/12 Python
python实现在线翻译功能
2020/03/03 Python
python3 配置logging日志类的操作
2020/04/08 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
python实现数字炸弹游戏程序
2020/07/17 Python
详解Flask前后端分离项目案例
2020/07/24 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
经理管理专业自荐信范文
2013/12/31 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
导游词格式
2015/02/13 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
详解Nginx 工作原理
2021/03/31 Servers
golang goroutine顺序输出方式
2021/04/29 Golang
vue的项目如何打包上线
2022/04/13 Vue.js