gpt4 book ai didi

python-3.x - 使用鼠标在 python tkinter Canvas 上绘制并获取指向列表的点?

转载 作者:行者123 更新时间:2023-12-04 23:40:00 24 4
gpt4 key购买 nike

我正在使用 tkinter 开发 Python 应用程序。我想做的是在 Canvas 坐标上绘制,这些点将被记录到一个列表中,以便我稍后进行计算。
如果不可能,您会推荐任何其他可以做到这一点的工具或 GUI 平台吗?

编辑:到目前为止,我所拥有的是一个可以从列表中获取点并在 Canvas 上绘制的应用程序。我也想要相反的工作方式。

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror
from tkinter import ttk
import tkinter
import threading

another_points = []

class Waveform(Frame):
def __init__(self, master):
ttk.Frame.__init__(self, master)
self.master = master

self.points = [10, 20, 30]
self.create_widget()

def create_widget(self):

self.LoadFrame = ttk.LabelFrame(self.master, text = "Load")
self.LoadFrame.pack(side = "left", padx = 10, pady = 10)
self.PlotFrame()

self.anotherFrame = ttk.LabelFrame(self.LoadFrame, text = "Browse")
self.anotherFrame.pack(fill = "both", padx = 10, pady = 10)
self.OpenFileButton = ttk.Button(self.anotherFrame, text = "Browse", command = self.load_file)
self.OpenFileButton.grid(row = 0, column = 0)

def load_file(self):
fname = askopenfilename(filetypes = (("Text files", "*.txt"), ("All files", "*.*")))
another_points[:] = []
self.points[:] = []
if fname:
try:
print (fname)
with open(fname) as f:
for line in f:
another_points.append(float(line.rstrip()))

self.points = another_points

except:
print ("Error")
return


def PlotFrame(self):
self.PlotFrame = ttk.LabelFrame(self.master, text = "X/Y Coordinates")
self.PlotFrame.pack(side = LEFT, padx = 10, pady = 10)

self.width = 400
self.height = 350
self.pressure = 75
self.x_increment = 1
self.x_factor = 0.04
self.y_amplitude = 80


def draw():
self.GraphFrame.delete(self.sin_line)
self.xy1 = []
self.xy2 = self.points
for x in range(len(self.xy2)):
self.xy1.append(x + 25)
self.xy1.append(self.height - self.xy2[x])

self.sin_line = self.GraphFrame.create_line(self.xy1, fill = "yellow")

self.UpdateButton = ttk.Button(self.PlotFrame, text = "Update", command = draw)
self.UpdateButton.pack()

self.GraphFrame = Canvas(self.PlotFrame, width = self.width, height = self.height, bg = "black")

self.GraphFrame.pack()
self.original = []

self.mock = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
for x in range(len(self.mock)):
self.original.append((x + 5)*10)
self.original.append((self.height - self.mock[x])/100)

self.sin_line = self.GraphFrame.create_line(self.original, fill = "yellow")


if __name__ == "__main__":
master = Tk()
Waveform(master).pack(side = "top", fill ="both", expand = True)
master.mainloop()

-谢谢

最佳答案

从...开始

import tkinter as tk
root = tk.Tk()
def mmove(event):
print(event.x, event.y)
root.bind('<Motion>', mmove)
root.mainloop()

然后按照你的意愿进行详细说明。将运动绑定(bind)到 Canvas 、在 Canvas 上绘制点、将对附加到列表、绑定(bind)点击代替或附加、过滤点流等。

关于python-3.x - 使用鼠标在 python tkinter Canvas 上绘制并获取指向列表的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40604233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com