[PYTHON] Obtenez des informations de dessin à chaque fois dans Tkinter

introduction

Une bibliothèque pour écrire des programmes GUI en Python Tkinter. Dans cette bibliothèque, vous pouvez dessiner une image en utilisant le canevas à l'intérieur.

Je pense que chaque être humain a la possibilité de dessiner une image à l'aide de Canvas, mais je ne pourrais pas le savoir clairement même si j'ai recherché le programme pour obtenir les informations écrites dans Canvas à l'heure définie. J'écrirai un programme qui servira également de mémorandum.

À propos, le programme lui-même de dessiner une image à l'aide de Canvas renvoyé au site suivant. Tracez une ligne sur le canevas Python avec la souris

Environnement d'exécution

code

#!/usr/bin/env python
# -*- coding: utf8 -*-
import tkinter
import time
from PIL import Image, ImageDraw

class Application(tkinter.Frame):
	def __init__(self, master=None):
		super().__init__(master)
		self.master = master
		self.master.title('Measure the time to draw')
		self.create_variables()
		self.create_widgets()
		self.pack()

	def create_widgets(self):
		self.draw_canvas = tkinter.Canvas(self, bg='white', width=self.img_size[0], height=self.img_size[1])
		self.draw_canvas.grid(row=1, column=0, columnspan=4)
		self.draw_canvas.bind('<Button-1>', self.start)
		self.draw_canvas.bind('<B1-Motion>', self.paint)
		self.draw_canvas.bind('<ButtonRelease-1>', self.reset)
	
	def create_variables(self):
		self.img_size = (600, 600)
		self.old_x, self.old_y = None, None
		self.color = 'black'
		self.pen_width = 5.0
		self.im = Image.new('RGB', self.img_size, 'white')
		self.draw = ImageDraw.Draw(self.im)
		
		self.tick_time = 30
		self.timer_id = None
		self.start_time = None
		
	#methods
	def start(self, event):
		if self.timer_id is None:
			self.timer_start()
		self.draw_canvas.create_line(event.x, event.y, event.x, event.y, width=self.pen_width, fill=self.color, capstyle="round", smooth=True, splinesteps=36)
		self.draw.line((event.x, event.y, event.x, event.y), fill=self.color, width=int(self.pen_width))
		self.old_x, self.old_y = event.x, event.y
	
	def paint(self, event):
		if self.old_x and self.old_y:
			self.draw_canvas.create_line(self.old_x, self.old_y, event.x, event.y, width=self.pen_width, fill=self.color, capstyle="round", smooth=True, splinesteps=36)
			self.draw.line((self.old_x, self.old_y, event.x, event.y), fill=self.color, width=int(self.pen_width))
		self.old_x, self.old_y = event.x, event.y

	def reset(self, event):
		self.old_x, self.old_y = None, None
		self.timer_reset()
		
	#timer
	def timer_start(self):
		if self.timer_id is not None:
			self.after_cancel(self.timer_id)
		self.start_time = time.time()
		self.timer_id = self.after(self.tick_time, self.timer_count)
	
	def timer_count(self):
		t = time.time() - self.start_time
		x = self.old_x if self.old_x is not None else -1
		y = self.old_y if self.old_y is not None else -1
		print("temps écoulé:%f ,Position X%d,Position Y%d" % (t, x, y))
		self.timer_id = self.after(self.tick_time, self.timer_count)
	
	def timer_reset(self):
		if self.timer_id is None:
			return
		self.after_cancel(self.timer_id)
		self.timer_id = None

if __name__ == "__main__":
	root = tkinter.Tk()
	app = Application(master=root)
	app.mainloop()

Résultat d'exécution

Lorsque vous l'exécutez, vous verrez une toile pour le dessin. Lorsque je dessine une image sur cette toile avec la souris, cela devient un terminal

スクリーンショット 2020-09-28 6.25.23.png

Commentaire

Les fonctions liées au comportement du minuteur sont définies par _timer_start () _, _timer_count () _, _timer_reset () _. Ces fonctions sont appelées selon _start () _, _reset () _ lié à Canvas, et _timer_count () _ est désormais appelée à chaque fois que définie dans la variable tick_time par la fonction _after () _. On suppose que les informations de dessin de

finalement

C'était mon premier article à écrire.

J'étais juste en train d'écrire des lettres et d'étudier comment les écrire, alors j'espère que ce programme sera utile dans les situations où vous souhaitez obtenir des informations manuscrites en ligne.

référence

Tracez une ligne sur le canevas Python avec la souris [tkinter - .after() - RIP Tutorial] (https://riptutorial.com/ja/tkinter/example/22870/-after--)

Recommended Posts

Obtenez des informations de dessin à chaque fois dans Tkinter
Obtenez des informations de dessin à chaque fois dans Tkinter
Obtenir la date et l'heure au format spécifié
Obtenir l'heure actuelle JST en notation ISO8601
Obtenez des données de séries chronologiques de k-db.com avec Python
Obtenez des variables d'environnement en Python, sinon définissez les valeurs par défaut
Obtenez une sortie standard en temps réel avec le sous-processus Python