我最终试图运行一个比这更复杂的代码,但这是我试图克服的问题。我只需要能够运行一个代码,该代码将点击的像素的x,y坐标记录下来,并将它们记录为变量或将它们附加到列表中。现在我将它们设置为L_Click_x
和L_Click_y
,我最终希望能够将这些坐标添加到列表中,或者能够在函数中调用它们。我所尝试过的任何东西似乎都没有用,我对此很陌生,所以我可能还有一些基本的东西。 (此外出现的红线仅用于视觉确认点击)
from tkinter import *
def motion(event):
x, y = event.x, event.y
print("Current Position = ",(x,y))
def LeftClick(event):
L_Click_x, L_Click_y = event.x, event.y
redline = canvas.create_line(0,L_Click_y,400,L_Click_y,fill = "red")
redline = canvas.create_line(L_Click_x,0,L_Click_x,300,fill = "red")
print("Left Click = ",(L_Click_x,L_Click_y))
root = Tk()
root.bind('<Motion>',motion)
root.bind('<Button-1>',LeftClick)
canvas = Canvas(root, width = "400",height = "300")
canvas.pack()
root.mainloop()
答案 0 :(得分:0)
您需要跟踪第一个单击的点,直到第二个点已知,然后在两者之间绘制一条线段。
这个简单的例子使用了一个全局变量,绘制时丢弃了这些点;您可能希望使用容器来跟踪线段,以及允许您在不使其全局化的情况下访问它的程序构造。
请注意我将事件绑定到画布而不是root;我更改了导入以避免混淆命名空间(随着应用程序的增长,你会很高兴你这样做),并将camelcase名称更改为更加pythonic的约定。
import tkinter as tk
def motion(event):
x, y = event.x, event.y
print("Current Position = ", (x, y))
def left_click(event):
global line_segment
line_segment.append(event.x)
line_segment.append(event.y)
canvas.create_oval(event.x+1, event.y+1, event.x-1, event.y-1)
if len(line_segment) == 4:
canvas.create_line(*line_segment, fill="red")
line_segment = []
if __name__ == '__main__':
line_segment = []
root = tk.Tk()
canvas = tk.Canvas(root, width="400", height="300")
canvas.pack()
canvas.bind('<Motion>', motion)
canvas.bind('<Button-1>', left_click)
root.mainloop()