Python 导航工具栏未显示在窗口上
我正在尝试将导航工具栏放置在画布窗口中。但当我尝试运行代码时,只有工具栏显示。我尝试的行也包含在下面的Python 导航工具栏未显示在窗口上,python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,我正在尝试将导航工具栏放置在画布窗口中。但当我尝试运行代码时,只有工具栏显示。我尝试的行也包含在下面的#中。如何解决这个问题 代码是可执行的。第一个窗口的值已分配,只需单击“单击”按钮 调用NavigationToolbar2Tk(图,画布)时,使用的底层方法是容器canvas上的pack,这与通过create\u window方法创建的其余小部件冲突。您需要创建一个框架来固定工具栏,然后在框架上调用创建窗口: import tkinter as tk import numpy as np im
#
中。如何解决这个问题
代码是可执行的。第一个窗口的值已分配,只需单击“单击”按钮
调用
NavigationToolbar2Tk(图,画布)
时,使用的底层方法是容器canvas
上的pack
,这与通过create\u window
方法创建的其余小部件冲突。您需要创建一个框架
来固定工具栏,然后在框架上调用创建窗口
:
import tkinter as tk
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
root = tk.Tk()
root.geometry("500x450")
fig = Figure(figsize=(5, 4), dpi=100)
t = np.arange(0, 3, .01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
canvas = tk.Canvas(root)
canvas.pack(fill="both",expand=True)
figure_canvas = FigureCanvasTkAgg(fig, root)
figure_canvas.draw()
toolbar_frame = tk.Frame(canvas)
toolbar = NavigationToolbar2Tk(figure_canvas, toolbar_frame)
toolbar.update()
canvas.create_window(0,0, window=figure_canvas.get_tk_widget(), anchor=tk.NW)
canvas.create_window(0,400, window=toolbar_frame, anchor=tk.NW)
root.mainloop()
但从您当前的设置来看,实际上并不需要调用所有create\u window
。相反,您可以简单地使用网格将它们排列起来,并创建一个额外的框架来存储工具栏
:
def open_window1():
y = 1/2
b = 1/4
...
top = tk.Toplevel()
top.wm_geometry("1400x594")
top.title('Result table')
canvas = tk.Canvas(top,bg="white", width=1395, height=594)
canvas.grid(row=0,column=180)
result_labels = ("ti","Pi","Pni","u''i", "u'i","ui")
for num, txt in enumerate(result_labels):
tk.Label(canvas, text=txt, font= "calibri 13", bg="white",width=10).grid(row=0,column=num,padx=12,pady=8)
for col, item in enumerate([t,p,pn,a,v,u]):
tk.Label(canvas, text=item[num], font="calibri 12", bg="white").grid(row=num+1,column=col,padx=12,pady=8)
f = Figure(figsize=(5,5), dpi=100)
q = f.add_subplot(111)
q.plot(t,a)
figure = FigureCanvasTkAgg(f, canvas)
figure.draw()
figure.get_tk_widget().grid(row=0,column=6,rowspan=7,padx=5,pady=2)
tool_bar_frame = Frame(canvas)
toolbar= NavigationToolbar2Tk(figure, tool_bar_frame)
toolbar.update()
tool_bar_frame.grid(row=7,column=6,pady=2)
这是可行的,但我想学习使用canvas.create_窗口放置navigationtoolbar,这样我就可以精确地将其放置到所需的位置。想法是一样的-您需要先将其放置在一个框架中。然后使用create_window
来放置框架。我尝试了canvas.create_window(850800,window=figure.\u-tkcanvas,anchor=tk.NW),但只有工具栏显示,而表没有显示。
def open_window1():
y = 1/2
b = 1/4
...
top = tk.Toplevel()
top.wm_geometry("1400x594")
top.title('Result table')
canvas = tk.Canvas(top,bg="white", width=1395, height=594)
canvas.grid(row=0,column=180)
result_labels = ("ti","Pi","Pni","u''i", "u'i","ui")
for num, txt in enumerate(result_labels):
tk.Label(canvas, text=txt, font= "calibri 13", bg="white",width=10).grid(row=0,column=num,padx=12,pady=8)
for col, item in enumerate([t,p,pn,a,v,u]):
tk.Label(canvas, text=item[num], font="calibri 12", bg="white").grid(row=num+1,column=col,padx=12,pady=8)
f = Figure(figsize=(5,5), dpi=100)
q = f.add_subplot(111)
q.plot(t,a)
figure = FigureCanvasTkAgg(f, canvas)
figure.draw()
figure.get_tk_widget().grid(row=0,column=6,rowspan=7,padx=5,pady=2)
tool_bar_frame = Frame(canvas)
toolbar= NavigationToolbar2Tk(figure, tool_bar_frame)
toolbar.update()
tool_bar_frame.grid(row=7,column=6,pady=2)