我在這里找到了下面的一段代碼。
from tkinter import *
canvas_width = 500
canvas_height = 150
def paint( event ):
python_green = "#476042"
x1, y1 = ( event.x - 1 ), ( event.y - 1 )
x2, y2 = ( event.x 1 ), ( event.y 1 )
w.create_oval( x1, y1, x2, y2, fill = python_green )
master = Tk()
master.title( "Painting using Ovals" )
w = Canvas(master,
width=canvas_width,
height=canvas_height)
w.pack(expand = YES, fill = BOTH)
w.bind( "<B1-Motion>", paint )
message = Label( master, text = "Press and Drag the mouse to draw" )
message.pack( side = BOTTOM )
master.mainloop()
它允許您通過拖動滑鼠在 Tkinter 畫布上進行繪制。當我非常緩慢地移動滑鼠時,它作業得很好,但是當我移動它快一點時,線條最終斷了。這就是我的意思:
Tkinter 視窗的螢屏截圖
最上面的那條線是慢慢畫的。底部的那個,相當快。如您所見,底部的許多地方都缺少點。我該如何解決?
uj5u.com熱心網友回復:
如果你想畫一條線,你需要注冊滑鼠移動的坐標并根據使用create_line方法創建線,因為它連接這些點。因此,將滑鼠的位置附加到串列并繪制一條線并使用該串列中的坐標。當您開始繪圖(單擊滑鼠)時,附加起始坐標。然后在移動時附加坐標,洗掉前一行(基本上更新)并繪制一個新的。當釋放滑鼠按鈕時清除點串列并將當前線 id 設定為 None 以指示當前沒有繪制線。
import tkinter as tk
line_id = None
line_points = []
line_options = {}
def draw_line(event):
global line_id
line_points.extend((event.x, event.y))
if line_id is not None:
canvas.delete(line_id)
line_id = canvas.create_line(line_points, **line_options)
def set_start(event):
line_points.extend((event.x, event.y))
def end_line(event=None):
global line_id
line_points.clear()
line_id = None
root = tk.Tk()
canvas = tk.Canvas()
canvas.pack()
canvas.bind('<Button-1>', set_start)
canvas.bind('<B1-Motion>', draw_line)
canvas.bind('<ButtonRelease-1>', end_line)
root.mainloop()
另外:
我強烈建議*在匯入某些內容時不要使用通配符 ( ),您應該匯入您需要的內容,例如from module import Class1, func_1, var_2等等或匯入整個模塊:import module然后您也可以使用別名:import module as md或類似的東西,重點是不要除非您確實知道自己在做什么,否則不要匯入所有內容;名稱沖突是問題所在。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/385017.html
