如何安排带导航栏的框架布局

3 投票
1 回答
2662 浏览
提问于 2025-04-18 12:56

我想要的东西很简单,但让我抓狂。由于某种原因,我无法为按钮和树形结构创建一个不附加在导航工具栏上的框架。我现在有的是:

这里输入图片描述

而我想要的是:

这里输入图片描述

以下是代码片段:

import os, ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg

from matplotlib.figure import Figure
from Tkinter import * 
import Tkinter, tkFileDialog, tkMessageBox
from numpy import arange, sin, pi, genfromtxt 

import sys
if sys.version_info[0] < 3:
   import Tkinter as Tk
else:
    import tkinter as Tk

root = Tk.Tk()
root.wm_title("Particle Counter")
fig= Figure(figsize = (10,7), dpi =100) # window size
fig.suptitle('Nanobiz Particle Counter', fontsize = 14, fontweight = 'bold')

ax1=fig.add_subplot(211) # figure adds this. later figure is added to canvas.
ax1.set_title('0.5u Particle',fontsize = 10)
ax1.set_xlabel('Time',fontsize = 10)
ax1.set_ylabel('Particle Number',fontsize = 10)   
ax1.set_ylim([0,6000])
ax1.xaxis.set_label_coords(1,-0.09)
ax1.plot(array1)

ax2=fig.add_subplot(212)
ax2.set_title('5u Particle',fontsize = 10)
ax2.set_xlabel('Time',fontsize = 10)
ax2.xaxis.set_label_coords(1,-0.09)
ax2.set_ylim([0,6000])
ax2.set_ylabel('Particle Number',fontsize = 10)
ax2.plot(array2)
ax2.grid()

mainFrame = Frame(root)
mainFrame.pack()

canvas = FigureCanvasTkAgg(fig, mainFrame)


#canvas.mpl_connect('key_press_event', on_key_event)

toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.update()
toolbar.pack()
canvas.show()
canvas._tkcanvas.pack(side=Tk.LEFT, fill=Tk.BOTH, expand=1)
canvas.get_tk_widget().pack(side=Tk.LEFT, fill=Tk.BOTH, expand=1)

menu = Menu(root)
root.config(menu=menu)
aboutMenu = Menu(menu)
menu.add_cascade(label="About",menu=aboutMenu, command = about_)
#aboutMenu.pack(side=Tk.RIGHT)


buttonFrame = Frame(root)
buttonFrame.pack(side = Tk.BOTTOM)


closeButton = Tk.Button(buttonFrame, text='Close', width = 6, command=_quit)
closeButton.pack(side= RIGHT)

谢谢

1 个回答

2

你在 mainFrame 里有一个 canvas,但是你把 NavigationToolbar 加到了 root 上。

在下面的代码中,把 root 替换成 mainFrame

toolbar = NavigationToolbar2TkAgg(canvas, mainFrame)

这样你就能在 NavigationToolbar 下面看到一个 Close 按钮。

如果想把 NavigationToolbar 放在 canvas 的上面,可以使用:

toolbar.pack(side=Tk.TOP)

编辑:关于树形结构 - 你是想把它放在 NavigationToolbarbuttonFrame 的左边,还是放在 NavigationToolbar 的下面和 buttonFrame 的上面呢?

对我来说,使用 .grid(row=...,column=...) 来布局会比使用 .pack() 更简单。

撰写回答