Python tkinter事件高级用法实例

 更新时间:2018年01月31日 10:30:38   作者:罗兵  
这篇文章主要介绍了Python tkinter事件高级用法,结合实例形式分析了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程序设计有所帮助。

相关文章

  • python3 unicode列表转换为中文的实例

    python3 unicode列表转换为中文的实例

    今天小编就为大家分享一篇python3 unicode列表转换为中文的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python调用Orator ORM进行数据库操作

    Python调用Orator ORM进行数据库操作

    Orator ORM 是一个功能丰富且灵活的 Python ORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的 API,下面我们就来看看它的具体使用吧
    2025-02-02
  • Python下应用opencv 实现人脸检测功能

    Python下应用opencv 实现人脸检测功能

    OpenCV是如今最流行的计算机视觉库,今天我们通过本文给大家分享Python下应用opencv 实现人脸检测功能,感兴趣的朋友跟随小编一起看看吧
    2019-10-10
  • Python基础篇之字符串的最全常用操作方法汇总

    Python基础篇之字符串的最全常用操作方法汇总

    我们在学习Python语言时会遇到各种各样的字符串方法处理,下面这篇文章主要给大家介绍了关于Python基础篇之字符串的最全常用操作方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • django框架之cookie/session的使用示例(小结)

    django框架之cookie/session的使用示例(小结)

    这篇文章主要介绍了django框架之cookie/session的使用示例(小结),详细的介绍了cookie和session技术的接口获取等问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • python 自动化办公之批量修改文件名实操

    python 自动化办公之批量修改文件名实操

    这篇文章主要介绍了python 自动化办公之批量修改文件名实操,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • python3编写ThinkPHP命令执行Getshell的方法

    python3编写ThinkPHP命令执行Getshell的方法

    这篇文章主要介绍了python3编写ThinkPHP命令执行Getshell的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Python数据分析之获取双色球历史信息的方法示例

    Python数据分析之获取双色球历史信息的方法示例

    这篇文章主要介绍了Python数据分析之获取双色球历史信息的方法,涉及Python网页抓取、正则匹配、文件读写及数值运算等相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • python中urllib.request和requests的使用及区别详解

    python中urllib.request和requests的使用及区别详解

    这篇文章主要介绍了python中urllib.request和requests的使用及区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python 实现一个全连接的神经网络

    Python 实现一个全连接的神经网络

    这篇文章主要介绍了Python 实现一个全连接的神经网络,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06

最新评论