Найти - Пользователи
Полная версия: как связать несколько графиков в одном приложении?
Начало » Python для новичков » как связать несколько графиков в одном приложении?
1
studer_fkhv
Необходимо следующее: окно приложения мысленно разбивается на четыре части. Первая для ввода данных и три кнопки, по нажатию каждой из которых можно будет увидеть график (три графика - оставшиеся части главного приложения). Подскажите, пожалуйста, как это можно осуществить. Если просто делать приложение с использованием Tkinter и matplotlib, то у меня получается, что plot отображается в отдельном окне, а я не знаю как сделать так его частью общего для всех окна (это для примера с только одним графиком, а надо целых три).
sypper-pit
тебе надо будет тогда генерировать картинку и вставлять её в твоё окно , из mathprolib отправить PIL , а дальше открыть эту картинку в TK
asv13
studer_fkhv
как и всем в таком случае советую библиотеку Chaсo

sypper-pit
maTHPROlib?? еще и через PIL - как то вообще заморочено
Evgeny
Если задача состоит в том, чтобы прицепить matplotlib'овские оси к Tkinter'овскому окну, то
начните отсюда:

http://matplotlib.sourceforge.net/examples/user_interfaces/embedding_in_tk.html
studer_fkhv
А как определяется выбор радиокнопки? Т.е. мне надо, чтобы по выбору одной из них определенные переменные принимали соответствующие значения, а затем выводились в Label и использовались в расчетных формулах. Извиняюсь, если скрипт коряво выглядит в целом, но пока еще не совсем разобрался (еще одна часть остается для графика 3D)
#-*- coding: utf8 -*-
def Temp(R,t,chi,c,rho,Q):
return 2*Q/(c*rho*pow(4*chi*t*pi,1.5))*exp(-R**2/(4*chi*t))

def showprop():
checked = Radiobutton.blabla() #вот здесь я не знаю, что надо использовать
if checked == 0:
chi = 0.00001
rho = 7800
c = 523
if checked == 1:
chi = 0.00001
rho = 8200
c = 578

import matplotlib, sys
matplotlib.use('TkAgg')
from numpy import linspace, sin, pi,exp
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg#, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from Tkinter import *

master = Tk()
master.title("Задача теплопроводности")
#-------------------------------------------------------------------------------
f = Figure(figsize=(4,3), dpi=100)
d = Figure(figsize=(4,3), dpi=100)
fr1 = Frame(master)
fr2 = Frame(master)
fr3 = Frame(master)
fr4 = Frame(master)
tempt = f.add_subplot(111)
tempr = d.add_subplot(111)
q=0.0002
r=10e-6
chi=0.00001
rho=7800
c=523
t = linspace(0, 0.0001, 51)
y1 = Temp(r,t,chi,c,rho,q)
y2 = Temp(2*r,t,chi,c,rho,q)
y3 = Temp(5*r,t,chi,c,rho,q)

t1 = 0.00001
r1 = linspace(0, 0.0001, 51)
y11 = Temp(r1,t1,chi,c,rho,q)
y22 = Temp(r1,2*t1,chi,c,rho,q)
y33 = Temp(r1,5*t1,chi,c,rho,q)

tempt.plot(t, y1, 'g--', label='R')
tempt.plot(t, y2, 'b--', label='2R')
tempt.plot(t, y3, 'r--', label='5R')


tempr.plot(r1, y11, 'g--', label='R')
tempr.plot(r1, y22, 'b--', label='2R')
tempr.plot(r1, y33, 'r--', label='5R')

#a.ylabel('Temp') # обозначение оси ординат
#a.title('Depend from time') # название графика
#a.legend() # вставка легенды (текста в label)
rholab = Label(fr1,text="Плотность = "+str(rho))
chilab = Label(fr1,text="Температуропроводность = "+str(chi))
clab = Label(fr1,text="Теплоёмкость = "+str(c))

#описываем выбор материала
matrad = IntVar()
matrad.set(0)
Radiobutton(fr1,text="Сталь Ст.3",variable=matrad,value=0,command=showprop()).pack(side=LEFT)
Radiobutton(fr1,text="Медь",variable=matrad,value=1,command=showprop()).pack(side=LEFT)

qlab = Label(fr2,text="Количество теплоты = ")
qinput = Entry(fr2)
#rholab.pack(fill=Y)
#chilab.pack(fill=Y)
#clab.pack(fill=Y)
#qlab.pack(fill=X,side=LEFT)
#qinput.pack(fill=X,side=LEFT)
tlab = Label(fr3,text="Время = ")
tinput = Entry(fr3)
rlab = Label(fr4,text="Радиус = ")
rinput = Entry(fr4)
tlab.pack(fill=X,side=LEFT)
tinput.pack(fill=X,side=LEFT)
rlab.pack(fill=X,side=LEFT)
rinput.pack(fill=X,side=LEFT)
dataPlot = FigureCanvasTkAgg(f, master=master)
dataPlot.show()
dataPlot2 = FigureCanvasTkAgg(d, master=master)
dataPlot2.show()
#dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
fr1.grid(row=1,column=0)
fr2.grid(row=2,column=0)
fr3.grid(row=3,column=0)
fr4.grid(row=4,column=0)
dataPlot.get_tk_widget().grid(row=0,rowspan=5,column=1)
dataPlot2.get_tk_widget().grid(row=6,column=1)
#-------------------------------------------------------------------------------
master.mainloop()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB