如何在 PySimpleGUI 中单击鼠标提取数据点?
我有一组 2D (x,y) 数据点。我使用 PySimpleGUI 图形元素和 drawCircle 函数绘制了 2D 数据。现在,当我单击一个圆圈(代表一个数据点)时,我想执行一个函数,将这个 (x,y) 数据点作为其输入。当我单击圆上的任意位置时,我想获得我绘制的确切 (x,y) 数据点(不是我单击的位置的坐标)。
import PySimpleGUI as sg
layout = [[sg.Graph(canvas_size=(800, 800), graph_bottom_left=
(-105, -105), graph_top_right=(105, 105), background_color='white',
key='graph', tooltip=None, enable_events=True)], ]
window = sg.Window('Network Prediction Evaluation', layout,
grab_anywhere=True).Finalize()
graph = window['graph']
# Draw axis
graph.DrawLine((-100, 0), (100, 0))
graph.DrawLine((0, -100), (0, 100))
for x in range(-100, 101, 20):
graph.DrawLine((x, -3), (x, 3))
if x != 0:
graph.DrawText(x, (x, -10), color='green')
for y in range(-100, 101, 20):
graph.DrawLine((-3, y), (3, y))
if y != 0:
graph.DrawText(y, (-10, y), color='blue')
# Draw Graph
f = open("./data/train_analysis.txt", "r")
s_id = []
true_val = []
pred_val = []
f.readline() # to remove column names
for x in f:
s = x.split()
s_id.append(float(s[0]))
true_val.append(int(round(float(s[1]) * 100)))
pred_val.append(int(round(float(s[2]) * 100)))
for i in range(len(true_val)):
# graph.DrawLine((true_val[i],0),(true_val[i],pred_val[i]))
graph.DrawCircle((true_val[i], pred_val[i]), 4, line_color='red',
fill_color='blue')
while True:
event, values = window.read()
if event is None:
break
val = values[event]
print(val)
我能够获得鼠标点击位置的坐标。但是当我单击圆圈上的任意位置时,我想获得确切的数据点。我怎样才能做到这一点?