[PYTHON] In Tkinter erhalten Sie jedes Mal Zeichnungsinformationen

Einführung

Eine Bibliothek zum Schreiben von GUI-Programmen in Python Tkinter. In dieser Bibliothek können Sie mit der darin enthaltenen Leinwand ein Bild zeichnen.

Ich denke, dass jeder Mensch die Möglichkeit hat, ein Bild mit Canvas zu zeichnen, aber ich konnte es nicht klar herausfinden, selbst wenn ich mir das Programm ansah, das die zum festgelegten Zeitpunkt in Canvas geschriebenen Informationen erfasst. Ich werde ein Programm schreiben, das auch als Memorandum dient.

Das Programm selbst zum Zeichnen eines Bildes mit Canvas bezog sich übrigens auf die folgende Seite. Zeichnen Sie mit der Maus eine Linie auf Python-Canvas

Ausführungsumgebung

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("verstrichene Zeit:%f ,X Position%d,Y-Position%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()

Ausführungsergebnis

Wenn Sie es ausführen, sehen Sie eine Zeichenfläche zum Zeichnen. Wenn ich mit der Maus ein Bild auf diese Leinwand zeichne, wird es zu einem Terminal

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

Kommentar

Funktionen, die sich auf das Timer-Verhalten beziehen, werden durch _timer_start () _, _timer_count () _, _timer_reset () _ definiert. Diese Funktionen werden gemäß _start () _, _reset () _ aufgerufen, das an Canvas gebunden ist, und jetzt wird _timer_count () _ jedes Mal aufgerufen, wenn die Funktion _after () _ die Variable tick_time definiert. Es wird vermutet, dass die Zeichnungsinformationen von

Schließlich

Es war mein erster Artikel.

Ich war gerade damit beschäftigt, Briefe zu schreiben und zu untersuchen, wie man sie schreibt, und hoffe, dass dieses Programm in Situationen nützlich ist, in denen Sie handgeschriebene Online-Informationen erhalten möchten.

Referenz

Zeichnen Sie mit der Maus eine Linie auf Python-Canvas [tkinter - .after() - RIP Tutorial] (https://riptutorial.com/ja/tkinter/example/22870/-after--)

Recommended Posts

In Tkinter erhalten Sie jedes Mal Zeichnungsinformationen
In Tkinter erhalten Sie jedes Mal Zeichnungsinformationen
Datum und Uhrzeit im angegebenen Format abrufen
Ruft die aktuelle JST-Zeit in ISO8601-Notation ab
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Ruft Umgebungsvariablen in Python ab, andernfalls legen Sie Standardwerte fest
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess