我在一個Python應用程序中使用Tkinter的工作。我想要做的是繪製畫布座標,並將這些點記錄到列表中,以便稍後進行計算。 如果這是不可能的,你會建議任何其他工具或GUI的平臺,可以做到這一點?使用鼠標在python tkinter畫布上繪製並獲取點到列表?
編輯:我有什麼到目前爲止,可以從列表中取分,並在畫布上繪製的應用程序。我希望有相反的工作方式。
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()
-Thanks
到目前爲止您嘗試過什麼?現在,這個問題只是「爲我寫代碼」。 – Lafexlos
這段代碼不會運行。 'AttributeError的:「波形」對象有沒有屬性「CustomizedWaveformes'' –
您可以添加綁定鼠標移動的時候,當你點擊鼠標。您可以使用爲綁定函數提供的信息來繪製線條。 –