Python tkinter事件高级用法实例
作者:罗兵 发布时间:2023-12-09 10:28:17
标签: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程序设计有所帮助。
来源:http://www.cnblogs.com/hhh5460/p/5188527.html


猜你喜欢
- step 1:perpar database & datause mastergoCreate database Inventory
- 最近在做声音文件数据处理,写了一个自动将m4a文件转化为wav的脚本。import osm4a_path = "/Users/Do
- 文件操作是开发中经常遇到的场景,那么如何判断一个对象是文件对象呢?下面我们总结了3种常见的方法。方法1:比较类型第一种方法,就是判断对象的t
- 使用pip安装python库的几种方式1、使用pip在线安装1.1 安装单个package格式如下:pip install SomePack
- 1概述 SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL
- 今天以前的同学问我关于这方面的SQL语句,我特意记忆一下,毕竟这个也比较常见了select * from (select * from me
- Python数据库编程之pymysql学习之前务必安装MySQL并已启动相关服务。一、pymsql的安装在python3的环境中直接使用以下
- 介绍Django是一个Web框架——一套用于帮助开发交互式网站的工具。Django能够响应网页请求,还能让我们更轻松地读写数据库、管理用户等
- 最近项目中需要与管易云erp做对接,看了他的接口文档,php的示例代码,于是用python仿写。其中传的参数data中前面几个json数据是
- 批量处理文件时,常需要先遍历某个路径提取特定条件的文件名。这篇写一个暴力遍历但很简洁的方法,真的非常简洁但是非常暴力。例子目标是:获得存放遥
- 判断python中的一个字符串是否为空,可以使用如下方法1、使用字符串长度判断len(s) ==0 则字符串为空#!/user/local/
- 什么是结构体结构是表示字段集合的用户定义类型。它可以用于将数据分组为单个单元而不是将每个数据作为单独的值的地方。例如,员工有firstNam
- 第1章 argparse简介1.1 解析argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块
- 解决中文输入的两种应用:在脚本中加语言编码声明 “-*- coding: uft-8 -*-”应用一:print中出现中文方法一:用unic
- 下载的数据是pascal voc2012的数据,已经有annotation了,不过是xml格式的,训练的模型是在Google模型的基础上加了
- 先给大家说下什么是localstorage前几天在老项目中发现有对cookie的操作觉得很奇怪,咨询下来是要缓存一些信息,以避免在URL上面
- 下面给大家介绍js中apply和Math.max()函数的问题,具体内容如下所示:var arr=[1,3,6,3,7,9,2];conso
- 循环链表就是将单链表的末尾指向其头部,形成一个环。循环链表的增删操作和单链表的增删操作区别不大。只是增加时,需要考虑空链表增加第一个节点的特
- 关于维卷积的理解功能一维卷积一般用于处理文本数据,常用语自然语言处理中,输入一般是文本经过embedding的二维数据。定义tf.layer
- Git 创建仓库本章节我们将为大家介绍如何创建一个 Git 仓库。你可以使用一个已经存在的目录作为Git仓库。git initGit 使用