#python #tkinter
#python #tkinter
Вопрос:
Я пытаюсь создать paint с помощью python tkinter, но я не могу нарисовать линию на холсте! Я на ubuntu 20.04, и вот мой код :
from tkinter import *
def draw(event):
startX, startY = event.x, event.y
my_canvas.create_line(startX, startY, event.x, event.y, fill="black")
print(startX, startY, event.x, event.y)
root = Tk()
root.title("Colors")
my_canvas = Canvas(root, height=500, width=500, bg="wheat")
my_canvas.pack()
root.bind("<B1-Motion>", draw)
root.mainloop()
Ответ №1:
Вам нужно:
- сохраните
startX
иstartY
при первом щелчке мыши - нарисуйте линию от
(startX, startY)
до(event.x, event.y)
при перемещении мыши - обновление
startX
иstartY
после рисования строки
from tkinter import *
def start_draw(event):
global startX, startY
startX, startY = event.x, event.y # save start position
def draw(event):
global startX, startY
my_canvas.create_line(startX, startY, event.x, event.y, fill="black")
print(startX, startY, event.x, event.y)
startX, startY = event.x, event.y # update start position
root = Tk()
root.title("Colors")
my_canvas = Canvas(root, height=500, width=500, bg="wheat")
my_canvas.pack()
root.bind("<Button-1>", start_draw)
root.bind("<B1-Motion>", draw)
root.mainloop()
Ответ №2:
Вы установили x0==x1
и y0==y1
в my_canvas.create_line(startX, startY, event.x, event.y, fill="black")
котором означает, что и начальная точка, и конечная точка одинаковы. Если вы хотите создать прямые линии, предложите вам создать линию при нажатии кнопки и сохранить начальные точки, а затем использовать линию canvas.coords
для обновления конечных точек.
Вот пример:
from tkinter import *
def getStartPoint(event):
global startX, startY, line
startX, startY = event.x, event.y
line = my_canvas.create_line(startX, startY, event.x, event.y, fill="black")
def draw(event):
my_canvas.coords(line, startX, startY, event.x, event.y)
print(startX, startY, event.x, event.y)
root = Tk()
root.title("Colors")
startX = None
StartY = None
line = None
my_canvas = Canvas(root, height=500, width=500, bg="wheat")
my_canvas.pack()
root.bind('<1>', getStartPoint)
root.bind("<B1-Motion>", draw)
root.mainloop()
Ответ №3:
from tkinter import *
def draw(event):
startX, startY = event.x, event.y
x1, y1 = (event.x - 1 ), (event.y -1 )
x2, y2 = (event.x 1), (event.y 1)
my_canvas.create_line(x1, y1, x2, y2, width = 1, fill = "black")
print(startX, startY, event.x, event.y)
root = Tk()
root.title("Colors")
my_canvas = Canvas(root, height=500, width=500, bg="white")
my_canvas.pack(expand = YES, fill = BOTH)
root.bind("<B1-Motion>", draw)
root.mainloop()
Комментарии:
1. На этом сайте не рекомендуется использовать ответы только для кода. Этот ответ будет намного лучше, если вы добавите объяснение того, что вы изменили или добавили.