【发布时间】:2018-09-20 14:10:29
【问题描述】:
代码中需要注意的锚点很少。
每次下拉值更改时,update_observation() 函数都会更新。每当更改下拉列表值时,我希望图表也随之更改。在任何时候我都只想要一个图形窗口的实例。我想更新图形窗口内的信息。我尝试使用动画,但我相信使用跟踪方法可以替代它。
按钮只是用来打开和关闭窗口。它没有解决其他目的。它一直绑定到同一个窗口没有关闭。如何在 update_observation() 函数中使用 artifact_graph_window 的值。
def tab_two_load(self,tab1_open_observations):
def update_observation(a,b,c):
proj_name,mod_name = observation_project_value.get().split(" -- ")
observations_fr_project = db.query_findings_by_project(proj_name,mod_name)
##CONFIG
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
## DATA
x_cat = [x[1] for x in db.query_artifact()]
x_cat = x_cat[:-2]
y_count = {}
for i in x_cat:
y_count[i] = 0
for i in observations_fr_project:
y_count[i[2]] = y_count[i[2]] + 1
print(y_count)
x = y_count.keys()
y = y_count.values()
## PLOT
a.bar(x,y,color='blue')
## SHOW
a.set_title ("Artifact Breakdown", fontsize=16)
a.set_ylabel("Breakdown", fontsize=14)
a.set_xlabel("Artifact Type", fontsize=14)
a.yaxis.set_major_locator(MaxNLocator(integer=True))
#######################################
''' GRAPH END '''
#######################################
canvas = FigureCanvasTkAgg(fig, master=artifact_graph_window)
canvas.get_tk_widget().pack()
canvas.draw()
def artifact_graph():
artifact_graph_window = Toplevel(self)
artifact_graph_window.title('Artifact Graph')
button_graph_1.config(state='disable')
proj_name,mod_name = observation_project_value.get().split(" -- ")
observations_fr_project = db.query_findings_by_project(proj_name,mod_name)
def quit_win():
artifact_graph_window.destroy()
button_graph_1.config(state='normal')
quit_artifact_graph = Button(artifact_graph_window, text='Quit', command=quit_win)
quit_artifact_graph.pack()
artifact_graph_window.protocol("WM_DELETE_WINDOW", quit_win)
open_obs_result = db.query_open_findings()
open_obs_count = len(open_obs_result)
lbl_open_obs = Label(tab1_open_observations, text='Open Observations')
lbl_open_obs.grid(row=0, column = 0,padx=10, pady=10)
lbl_open_obs_count = Label(tab1_open_observations, text='Open Project/Modules ')
lbl_open_obs_count.grid(row=1, column=0,padx=10, pady=10)
lbl_open_obs_count_number = Label(tab1_open_observations, text=open_obs_count)
lbl_open_obs_count_number.grid(row=1, column=1,padx=10, pady=10)
observation_project_value = StringVar(tab1_open_observations,value='Default Text')
observation_project_value.trace('w',update_observation)
lbl_observation_project = Label(tab1_open_observations, text='Open Projects ')
lbl_observation_project.grid(row=2, column=0,padx=10, pady=10)
observation_project = [str(obs[0]) + ' -- ' + str(obs[1]) for obs in open_obs_result]
observation_project_value.set(observation_project[0])
observation_project_field = OptionMenu(tab1_open_observations,observation_project_value,*observation_project)
observation_project_field.grid(row=2, column=1,padx=10, pady=10)
button_graph_1 = Button(tab1_open_observations, text="Artifact Graph", command=artifact_graph)
button_graph_1.grid(row=4, column=0,padx=20, pady=20)
button_graph_1.bind()
【问题讨论】:
标签: python python-3.x matplotlib tkinter