我有一個包含多個滑塊和圖形的GUI程序。滑塊設置一個函數的參數,該函數應該被繪製在圖上。我開始按照http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html中的指示,從包裝變爲網格,並嘗試了廣告噁心。如果我移動一個滑塊,現在我有更新的情節,但如果我移動另一個滑塊,則不會。我沒有看到兩者之間的區別。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()
python在兩個滑塊中看到了什麼區別?在該程序的更深入版本中,沒有一個滑塊更新該圖。
當您移動滑塊時,被調用的函數,但繪圖不會更改,或者函數未被調用? –
在您的示例中,兩個滑塊都能正常工作,但只有正確的滑塊纔會更改比例,即如果更改左滑塊,然後右邊出現正確的輸出 – tacaswell
函數被調用,因爲左下角的文本變化。情節不會改變。我想知道的是如何使左側滑塊也直接更新劇情。 – jdj081