Matplotlib NavigationToolbar小部件未显示在Tkinter GUI中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matplotlib NavigationToolbar小部件未显示在Tkinter GUI中相关的知识,希望对你有一定的参考价值。
我正在设计一个简单的GUI,其中Tkinter由一个ListBox(带有Scrollbar)和一个画布(FigureCanvasTkAgg)组成。 ListBox是变量(时间序列)的集合,在选择时绘制为x-y图。布局示意图:
|---------------- Menu Bar --------------|
|----------------------------------------|
| |--- Frame 1-- | |------ Frame 2 ------|
| |-- ListBox -- |^| |
| | Item 1 |-| |
| | Item 2 |-| Canvas |
| | Item 3 |-| |
| | Item 4 |-| ------------------- |
| | Item 5 |-| Navigation toolbar |
| |--------------|v|---------------------|
|----------------------------------------|
构建GUI时,导航工具栏不存在,我已尝试使用pack()和grid()几何管理器。如果错误是如此明显但我不知道什么是错的,我道歉。最小的代码是:
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from tkinter import *
class Plot_tool(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.master.option_add('*tearOff', 'FALSE')
self.master.title("Tool")
self.options = [ i for i in range(50) ] # Some staff in ListBox
self.pack(fill = BOTH, expand = 1)
self.init_window()
def init_window(self):
menubar = Menu(self.master)
self.master.config(menu = menubar)
filemenu = Menu(menubar)
filemenu.add_command(label = "Load")
menubar.add_cascade(label = "File", menu = filemenu)
# Frame 1 (ListBox and Scrollbar)
framei = LabelFrame(self, text="frame", labelanchor="n")
framei.pack(side="left", fill=Y)
scrollbar = Scrollbar(framei)
scrollbar.pack(side="right",fill=Y)
self.items = Listbox(framei, yscrollcommand=scrollbar.set)
self.items.pack(side="left", fill=Y)
scrollbar.config(command = self.items.yview)
self.items.insert(0, *self.options)
# Frame 2 (Canvas and Navigation Toolbar)
group2 = Frame(self)
group2.pack(side="right")
fig = Figure(figsize=(200,100))
self.eje = fig.add_subplot(111)
self.figura = FigureCanvasTkAgg(fig, master = group2)
self.figura.get_tk_widget().pack()
self.figura.show()
toolbar = NavigationToolbar2TkAgg(self.figura, group2)
toolbar.pack()
toolbar.update()
def on_closing(root):
root.destroy()
exit()
def main():
root = Tk()
root.geometry("900x500")
app = Plot_tool(root)
root.protocol("WM_DELETE_WINDOW", lambda: on_closing(root))
root.mainloop()
if __name__ == '__main__':
main()
答案
从matplotlib页面坚持embedding_in_tk example,您首先要创建工具栏,然后打包画布。
group2 = Frame(self)
group2.pack(side="right")
fig = Figure(figsize=(200,100))
self.eje = fig.add_subplot(111)
self.figura = FigureCanvasTkAgg(fig, master = group2)
toolbar = NavigationToolbar2TkAgg(self.figura, group2)
self.figura._tkcanvas.pack()
toolbar.update()
此外,删除self.figura.show()
似乎加速思考了很多。
注意:在较新版本的matplotlib中,您应该使用NavigationToolbar2Tk
而不是NavigationToolbar2TkAgg
。
以上是关于Matplotlib NavigationToolbar小部件未显示在Tkinter GUI中的主要内容,如果未能解决你的问题,请参考以下文章