Python #root.bind(“,destroy) 类别: 标签\文本=[ “示例-30s”, “示例-120s”, “大卫计数”, “辛西娅在后面”, “米里亚姆·雷丁” ] 定义初始(自我,主): self.master=master 硕士头衔(“心肺GUI”
#root.bind(“,destroy) 类别: 标签\文本=[ “示例-30s”, “示例-120s”, “大卫计数”, “辛西娅在后面”, “米里亚姆·雷丁” ] 定义初始(自我,主): self.master=master 硕士头衔(“心肺GUI”) self.f=图(figsize=(4,3),dpi=72) #self.f.set_facecolor('红色') self.label_index=0 self.label_text=StringVar() self.label\u text.set(self.label\u text[self.label\u index]) #绘图数据(self.label\u text.get()) self.cvs=FigureCanvasTkAgg(self.f,master=root) self.cvs.get_tk_widget().pack(side=TOP,fill=BOTH,expand=1) self.cvs.\u tkcanvas.pack(侧=顶部,填充=两侧,展开=1) self.lbl1=标签(master,text='Data')#非交互式标签 self.lbl1.pack(侧=左) self.lbl2=标签(主控,宽度=30,文本变量=self.Label\u text) self.lbl2.bind(“,self.cycle\u label\u text) self.lbl2.pack(侧=左) self.btn1=按钮(主控,text='Plot data') self.btn1.bind(“\ lambda label\u text:plot\u数据(self.label\u text.get()) 自包装(侧=左) self.greet_按钮=按钮(master,text=“Analyze”,command=self.greet) 自我问候按钮包(侧面=左侧) def问候(自我): 打印(“分析!”) def循环标签文字(自身、事件): self.label_index+=1 self.label_index%=len(self.label_TEXT)#环绕 self.label\u text.set(self.label\u text[self.label\u index]) 绘图数据(label\u text.get()) def绘图数据(会话名称): a=我的图形用户界面。f.添加子图(211) b=我的gui.f.add子图(212) my_gui.cvs.show() 文件路径='C:/Users/David/My Documents/cardio呼吸实验/data/' fullfilename=filepath+session_name+'.txt' data=np.loadtxt(fullfilename,skiprows=7,usecols=(0,1,2)) t=[数据中的行的行[0] v=[数据中的行为行[1] p=[数据中的行为第[2]行] a、 绘图(t、v、颜色=‘红色’) a、 设置标题(“心跳和呼吸”) a、 设置标签(“时间”) a、 设置标签(“电压(mv)” b、 图(t,p) b、 设置标签(“时间”) b、 设置标签('压力(kpa)') return#不清楚是否需要 root=tk.tk() 根几何(“500x250+100+100”) my_gui=CardioGUI(根) root.mainloop()Python #root.bind(“,destroy) 类别: 标签\文本=[ “示例-30s”, “示例-120s”, “大卫计数”, “辛西娅在后面”, “米里亚姆·雷丁” ] 定义初始(自我,主): self.master=master 硕士头衔(“心肺GUI”,python,graph,tkinter,Python,Graph,Tkinter,#root.bind(“,destroy) 类别: 标签\文本=[ “示例-30s”, “示例-120s”, “大卫计数”, “辛西娅在后面”, “米里亚姆·雷丁” ] 定义初始(自我,主): self.master=master 硕士头衔(“心肺GUI”) self.f=图(figsize=(4,3),dpi=72) #self.f.set_facecolor('红色') self.label_index=0 self.label_text=StringVar() self.label\u t
您能提供一个输入数据的示例吗?也许还有一个预期结果的草图?这个程序是用来显示心电图数据,来自心脏的电压信号,作为数千个样本的时间序列。数据是文本文件,我可以读取和显示。(参见data-heart.png示例)。为了回答我的问题,我创建了两个任意列表v1和v2,作为两个不同数据集的示例。它们应该显示为data1.png和data2.png。可能超出了您的需要范围,但通常当我需要生成一些绘图时,我会从python scrip调用GNUPLOT,生成图像文件,然后根据需要将它们加载到GUI中。不管怎样,我会看看matplotlib图形显示器,然后试着给出一个答案。看起来在我的声誉达到10之前,我无法发布图像。对不起,您可以添加一个链接,存在一些图像托管服务,例如
import sys
if sys.version_info[0] < 3:
import Tkinter as tk
else:
import tkinter as tk
from Tkinter import Label, Entry, Button, TOP, LEFT, BOTH #, Canvas, Frame, W, N, E, S
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
def plot_data(fig, dat_name):
t = np.arange(10)
v1 = [1,2,3,4,5,4,4,4,4,4]
v2 = [4,4,4,4,5,4,4,3,2,1]
if dat_name[4] == 2:
y = v2
else:
y = v1
a = fig.add_subplot(111)
a.plot(t,y, color='red')
a.set_title('Graph of ')
a.set_xlabel('time (s)')
a.set_ylabel('voltage (mv)')
root = tk.Tk()
root.geometry("500x250+200+200")
dataname = 'data1'
f = Figure(figsize=(4,3), dpi=72)
canvas = FigureCanvasTkAgg(f, master=root)
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
#plot_data(f, dataname)
lbl = Label(root, text='Current data: ')
lbl.pack(side=LEFT)
etr = Entry(root, width=20)
etr.pack(side=LEFT)
etr.delete(0, last=None)
etr.insert(0, dataname) # What is the first parameter for???
dataname = etr.get()
#etr_entry.bind("<Return>", entry_handler)
#btn = Button(root, text = 'Open', command=entry_handler)
#btn.pack(side=LEFT)
plot_data(f, dataname)
print('dataname = '+dataname)
root.mainloop()
import sys
if sys.version_info[0] < 3:
import Tkinter as tk
else:
import tkinter as tk
from Tkinter import Label, Entry, Button, TOP, LEFT, BOTH #, Canvas, Frame, W, N, E, S
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
class ECG_Dsiplayer(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
master.bind("<c>", lambda x : self.clean())#allow to test the clean function, press "c"
master.bind("<Return>", lambda x : self.draw_data())
self.datasetName = tk.StringVar()
self.datasetName.set("data1") #default value
# ____________________________________________________
def draw_data(self):
self.clean()
self._createWidgets()
self.plot_ecg_data()
# ____________________________________________________
def plot_ecg_data(self):
values = self._load_data(self.datasetName.get())
a = self.figure.add_subplot(111)
a.plot(np.arange(len(values)),values, color='red')
a.set_title('Graph of ')
a.set_xlabel('time (s)')
a.set_ylabel('voltage (mv)')
# ____________________________________________________
def _createWidgets(self):
self.figure = Figure(figsize=(4,3), dpi=72)
self.canvas = FigureCanvasTkAgg(self.figure, master=self)
self.canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
self.canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
self.label = Label(self, text='Current data: ')
self.label.pack(side=LEFT)
self.datasetEntry = Entry(self, width=20, textvariable=self.datasetName)
self.datasetEntry.pack(side=LEFT)
# ____________________________________________________
def _load_data(self, dataName):
## TO OVERRIDE IN ORDER TO PROVIDE A TRUE DATA LOADING SYSTEM ##
if dataName == "data1":
return [1,2,3,4,5,4,4,4,4,4]
else:
return [4,4,4,4,5,4,4,3,2,1]
# ____________________________________________________
def clean(self):
for widget in self.pack_slaves():
widget.pack_forget()
# ____________________________________________________
if __name__ == "__main__":
root = tk.Tk()
root.geometry("500x250+200+200")
ecg = ECG_Dsiplayer(root)
ecg.pack(fill=BOTH, expand=1)
ecg.draw_data()
root.mainloop()
import numpy as np
from Tkinter import Label, Button, StringVar, LEFT, TOP, BOTH
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import sys
if sys.version_info[0] < 3:
import Tkinter as tk
else:
import tkinter as tk
def destroy(e): sys.exit()
#root.bind("<Destroy>", destroy)
class CardioGUI:
LABEL_TEXT = [
"Example-30s",
"Example-120s",
"David-counting",
"Cynthia-following",
"Miriam-reading"
]
def __init__(self, master):
self.master = master
master.title("Cardiorespiratory GUI")
self.f = Figure(figsize=(4,3), dpi=72)
# self.f.set_facecolor('red')
self.label_index = 0
self.label_text = StringVar()
self.label_text.set(self.LABEL_TEXT[self.label_index])
# plot_data(self.label_text.get())
self.cvs = FigureCanvasTkAgg(self.f, master=root)
self.cvs.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
self.cvs._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
self.lbl1 = Label(master, text='Data') # Non-interactive label
self.lbl1.pack(side=LEFT)
self.lbl2 = Label(master, width=30, textvariable=self.label_text)
self.lbl2.bind("<Button-1>", self.cycle_label_text)
self.lbl2.pack(side=LEFT)
self.btn1 = Button(master, text='Plot data')
self.btn1.bind("<Button-1>", \
lambda label_text: plot_data(self.label_text.get()))
self.btn1.pack(side=LEFT)
self.greet_button = Button(master, text="Analyze", command=self.greet)
self.greet_button.pack(side=LEFT)
def greet(self):
print("Analyse!")
def cycle_label_text(self, event):
self.label_index += 1
self.label_index %= len(self.LABEL_TEXT) # wrap around
self.label_text.set(self.LABEL_TEXT[self.label_index])
plot_data(label_text.get())
def plot_data(session_name):
a = my_gui.f.add_subplot(211)
b = my_gui.f.add_subplot(212)
my_gui.cvs.show()
filepath = 'C:/Users/David/My Documents/Cardiorespiratory Experiment/data/'
fullfilename = filepath+session_name+'.txt'
data = np.loadtxt(fullfilename, skiprows=7, usecols=(0,1,2))
t = [row[0] for row in data]
v = [row[1] for row in data]
p = [row[2] for row in data]
a.plot(t,v, color='red')
a.set_title('Heartbeat and Respiration')
a.set_xlabel('time (s)')
a.set_ylabel('voltage (mv)')
b.plot(t,p)
b.set_xlabel('time (s)')
b.set_ylabel('pressure (kpa)')
return # Unclear whether this is needed
root = tk.Tk()
root.geometry("500x250+100+100")
my_gui = CardioGUI(root)
root.mainloop()