对于表,我假设你想要记录的值的行。为此,我会推荐Treeview Widget out of tkinter.ttk。
当谈到坐在彼此相邻的两个时,我假设你认为pyplot图形周围的灰色边框是图表本身的一部分(换句话说,你并没有试图放置表格直接进入灰色区域或剧情画布)。为此,我重新安排了如何填充tk.Toplevel,因为您没有使用view_nets来开始任何事情。
import tkinter as tk, tkinter.ttk as ttk
import matplotlib.pyplot as plt
import matplotlib.backends.backend_tkagg as TkAgg
import numpy as np
top=tk.Toplevel()
view_nets = tk.Frame(top)
view_nets.pack(side='left',fill='both',expand=True) ## Packing Left in order to place
## another Frame next to it
# Widgets
f = plt.Figure(figsize=(10,8),dpi=100)
F = f.add_subplot(111)
canvas = TkAgg.FigureCanvasTkAgg(f,master = view_nets) ## Moved Chart to view_nets Frame
canvas.show()
## canvas.get_tk_widget().grid(column = 0, row = 0) I'll explain commenting this out below
toolbar = TkAgg.NavigationToolbar2TkAgg(canvas, view_nets)
toolbar.update()
canvas._tkcanvas.pack(fill='both',expand=True)
## Adding Frame to bundle Treeview with Scrollbar (same idea as Plot+Navbar in same Frame)
tableframe = tk.Frame(top)
tableframe.pack(side='left',fill='y') ## Packing against view_nets Frame
COLUMNS=['name','value'] ## Column Headers for Data
## See Documentation for more info on Treeview
table=ttk.Treeview(tableframe, columns=COLUMNS, show='headings')
table.pack(side='left',fill='y')
for column in COLUMNS: ## Setting Column Header
table.heading(column,text=column)
scroll=tk.Scrollbar(tableframe,command=table.yview) ## Adding Vertical Scrollbar
scroll.pack(side='left',fill='y')
table.configure(yscrollcommand=scroll.set) ## Attach Scrollbar
如果出于某些原因,你需要的图表和一个独立的帧(相对于顶层的帧)的表,那么你可以简单地包裹view_nets和tableframe在一个框架(将他们的父母更改为框架)。
我会提到的另一件事是,如果你 - 至少包括进口产品对每个人来说都更容易 - 我其实只是今天才开始学习matplotlib,这是我可以推断出你正在使用该库的唯一原因(即使这样我也必须仔细研究如何导入TkAgg Widgets)。根据我的经验,保留模块引用(比如如何导入Numpy)只有好处,因为直接导入模块内容可能会有问题(例如,从matplotlib.backends.backend_tkagg导入FigureCanvasTkAgg;或者更糟糕的是导入*)。
至于行“canvas.get_tk_widget()。grid(column = 0,row = 0)”,我得到几何错误。从源头上看,TkAgg小部件实际上,字面上包装自己的父母。这意味着它们不会实际创建自己的框架(这是我的习惯),如果用户为该框架定义几何管理器,将导致几何错误(尽管我会说写matplotlib的人/ pyplot几乎肯定比我聪明,所以他们为什么这样做可能是有原因的)。
无论如何,希望这可以帮助你;让我知道你是否有任何问题!
谢谢你的帮助!这绝对是完美的。非常感激! –
很高兴帮助:)如果您没有其他问题需要解答,您可以点击答案旁边的复选标记以将问题标记为“已回答” –