對於表,我假設你想要記錄的值的行。爲此,我會推薦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幾乎肯定比我聰明,所以他們爲什麼這樣做可能是有原因的)。
無論如何,希望這可以幫助你;讓我知道你是否有任何問題!
謝謝你的幫助!這絕對是完美的。非常感激! –
很高興幫助:)如果您沒有其他問題需要解答,您可以點擊答案旁邊的複選標記以將問題標記爲「已回答」 –