2013-05-21 7 views
0

나는 여러 슬라이더와 그래프를 포함하는 GUI 프로그램이 있습니다. 슬라이더는 함수의 매개 변수를 설정합니다.이 매개 변수는 그래프에 표시됩니다. 나는 http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html의 지시 사항을 따르기 시작했고, 팩에서 그리드로 바뀌었고, 광고 nauseum을 실험했습니다. 내가 지금 한 슬라이더를 움직이면 음모를 업데이트하지만 다른 슬라이더를 움직이면 안됩니다. 나는이 둘의 차이점을 보지 못했다.Matplotlib 일부 업데이트 tkinter

import matplotlib 
matplotlib.use('TkAgg') 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
from matplotlib.figure import Figure 
from Tkinter import * 

domain_min = 1 
domain_max = 10 
order_min = 0 
order_max = 3 
fig = Figure(figsize=(10,5), dpi=50) 

def module(x): 
    global domain, order, output_message, fig, a, x_vals, y_vals 

    domain = float(domain_slide.get()) 
    order = int(order_slide.get()) 

    output_message = 'f(1) = %i\nf(2) = %i\nf(3) = %i\nf(4) = %i\nf(5) = %i\nf(6) = %i\n\ 
f(7) = %i\nf(8) = %i\nf(9) = %i\nf(10)= %i'%(1**order,2**order,3**order,4**order,5**order,\ 
              6**order,7**order,8**order,9**order,10**order) 

    output_message_text.set(output_message) 

    x_vals = np.linspace(0,domain,100) 
    y_vals = x_vals**order 

    a = fig.add_subplot(111) 
    a.clear() 
    a.plot(x_vals,y_vals,color='blue') 

#GUI 
root = Tk() 

domain_slide = DoubleVar() 
order_slide = DoubleVar() 
output_message_text = StringVar() 

ds = Scale(root, variable = domain_slide, from_ = domain_min, to = domain_max, command = module) 
ds.grid(column = 0, row = 0) 

o_s = Scale(root, variable = order_slide, from_ = order_min, to = order_max, command = module) 
o_s.grid(column = 1, row = 0) 

out_message = Message(root, textvariable = output_message_text, width = 300, bg = 'white').grid(column = 0, row = 1, rowspan = 3) 


canvas = FigureCanvasTkAgg(fig, master=root) 
canvas.show() 
canvas.get_tk_widget().grid(column=3,row=1) 
canvas.show() 

label = Label(root) 
label.grid() 

root.mainloop() 

두 슬라이더에서 파이썬은 어떤 차이가 있습니까? 프로그램의 더 심층적 인 버전에서는 슬라이더가 그 플롯을 업데이트하지 않습니다.

+0

슬라이더를 움직이면 함수가 호출되었지만 플롯이 변경되지 않거나 호출되지 않는 함수입니까? –

+0

두 슬라이더가 예제에서 제대로 작동하지만 오른쪽 슬라이더 만 눈금을 변경합니다. 즉, 왼쪽 슬라이더를 변경하면 올바른 출력을 얻습니다. – tacaswell

+0

왼쪽 아래 모서리에있는 텍스트 변경. 줄거리는 변하지 않습니다. 내가 궁금한 점은 왼쪽에있는 슬라이더로 플롯을 직접 업데이트하는 방법입니다. – jdj081

답변

0

당신은 콜백 함수에

fig.cavas.draw() 

를 추가해야합니다.

나는 왜 이것이 캔버스를 다시 그려야하는지 알지 못합니다.

+0

그게 효과가있다. 감사! 나는 왜 그것이 다른 사람들을 위해서 일한 이유가 확실하지 않다. 즉,'fig.canvas.draw'입니다. – jdj081

관련 문제