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
#!/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()
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
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
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.
Zeichnen Sie mit der Maus eine Linie auf Python-Canvas [tkinter - .after() - RIP Tutorial] (https://riptutorial.com/ja/tkinter/example/22870/-after--)
Recommended Posts