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多进程操作实例
Nov 21 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
浅谈Python 的枚举 Enum
Jun 12 Python
python爬取个性签名的方法
Jun 17 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
Python实现图片转字符画的代码实例
Feb 22 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
Django中的AutoField字段使用
May 18 Python
如何利用Python识别图片中的文字
May 31 Python
python db类用法说明
Jul 07 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在线解压ZIP文件的方法
2014/12/30 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
Python类反射机制使用实例解析
2019/12/30 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python使用type动态创建类操作示例
2020/02/29 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
python 6行代码制作月历生成器
2020/09/18 Python
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
《桂花雨》教学反思
2014/04/12 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
思想道德自我评价2015
2015/03/09 职场文书
行政前台岗位职责
2015/04/16 职场文书
运动会通讯稿100字
2015/07/20 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
MySQL transaction事务安全示例讲解
2022/06/21 MySQL