目录
Tkinter创建GUI
from tkinter import *
from tree_regression import *
def redraw(tolerance_error, tolerance_number):
pass
def draw_new_tree():
pass
root = Tk()
Label(root, text="plot place holder").grid(row=0, columnspan=3)
Label(root, text="tolerance number: ").grid(row=1, column=0)
tolerance_number_entry = Entry(root)
tolerance_number_entry.grid(row=1, column=1)
tolerance_number_entry.insert(0, '10')
Label(root, text="tolerance error: ").grid(row=2, column=0)
tolerance_error_entry = Entry(root)
tolerance_error_entry.grid(row=2, column=1)
tolerance_error_entry.insert(0, '1.0')
button = Button(root, text='redraw', command=draw_new_tree).grid(row=3, column=1, columnspan=1)
check_button_var = IntVar()
check_button = Checkbutton(root, text="model tree", variable=check_button_var)
check_button.grid(row=3, column=0, columnspan=1)
redraw.draw_data = load_data_set('sine.txt')
redraw.test_data = np.arange(min(redraw.draw_data[:, 0]), max(redraw.draw_data[:, 0]), 0.01)
redraw(1.0, 10)
root.mainloop()
结果:
集成Matplotlib和Tkinter
先用画布来替换之间代码中Label占位符:
redraw.f = Figure(figsize=(5, 4), dpi=100)
redraw.canvas = FigureCanvasTkAgg(redraw.f, master=root)
redraw.canvas.show()
redraw.canvas.get_tk_widget().grid(row=0, columnspan=3)
结果:
Matplotlib和Tkinter的代码集成
完整代码:
from tkinter import *
from tree_regression import *
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib
matplotlib.use('TkAgg')
def redraw(tolerance_error, tolerance_number):
redraw.f.clf()
redraw.a = redraw.f.add_subplot(111)
if check_button_var.get():
# 模型树
pass
else:
my_tree = create_tree(redraw.draw_data, ops=(tolerance_error, tolerance_number))
y_hat = create_forecast(my_tree, redraw.test_data)
redraw.a.scatter(redraw.draw_data[:, 0], redraw.draw_data[:, 1], s=5)
redraw.a.plot(redraw.test_data, y_hat, linewidth=2.0)
redraw.canvas.show()
def get_inputs():
try:
tolerance_number = int(tolerance_number_entry.get())
except:
tolerance_number = 10
print("enter an integer for tolerance number")
tolerance_number_entry.delete(0, END)
tolerance_number_entry.insert(0, '10')
try:
tolerance_error = float(tolerance_error_entry.get())
except:
tolerance_error = 1.0
print("enter a float fot tolerance error")
tolerance_error_entry.delete(0, END)
tolerance_error_entry.insert(0, '1.0')
return tolerance_number, tolerance_error
def draw_new_tree():
tolerance_number, tolerance_error = get_inputs()
redraw(tolerance_error, tolerance_number)
root = Tk()
redraw.f = Figure(figsize=(5, 4), dpi=100)
redraw.canvas = FigureCanvasTkAgg(redraw.f, master=root)
redraw.canvas.show()
redraw.canvas.get_tk_widget().grid(row=0, columnspan=3)
Label(root, text="tolerance number: ").grid(row=1, column=0)
tolerance_number_entry = Entry(root)
tolerance_number_entry.grid(row=1, column=1)
tolerance_number_entry.insert(0, '10')
Label(root, text="tolerance error: ").grid(row=2, column=0)
tolerance_error_entry = Entry(root)
tolerance_error_entry.grid(row=2, column=1)
tolerance_error_entry.insert(0, '1.0')
button = Button(root, text='redraw', command=draw_new_tree).grid(row=3, column=1, columnspan=1)
check_button_var = IntVar()
check_button = Checkbutton(root, text="model tree", variable=check_button_var)
check_button.grid(row=3, column=0, columnspan=1)
redraw.draw_data = load_data_set('sine.txt')
redraw.test_data = np.arange(min(redraw.draw_data[:, 0]), max(redraw.draw_data[:, 0]), 0.01)
matplotlib.use('TkAgg')
redraw(1.0, 10)
root.mainloop()
效果:
CONTACT INFORMATION
E-mail: birdguan@seu.edu.cn
QQ: 46611253