2016-06-21 53 views
1

画像とその横にある画像に関する情報のテーブルを表示するトップレベルウィンドウが必要です。グラフとテーブルをtkinterの同じウィンドウにプロットする

imshow()を使用してイメージを表示することに成功しました。

  • tkinterでテーブルを作成するにはどうすればいいですか?私はこれのためのウィジェットを見つけることができません。
  • 2つのフレームを同じフレームに並べて表示するにはどうすればよいですか?

    top = Toplevel() 
    view_nets = Frame(top) 
    view_nets.grid() 
    
    # Widgets 
    f = Figure(figsize=(10,8),dpi=100) 
    F = f.add_subplot(111) 
    
    # Read data 
    net = np.genfromtxt(file_path) 
    # Plot the network. 
    im = F.imshow(net) 
    
    canvas = FigureCanvasTkAgg(f,master = top) 
    canvas.show() 
    canvas.get_tk_widget().grid(column = 0, row = 0) 
    
    toolbar = NavigationToolbar2TkAgg(canvas, top) 
    toolbar.update() 
    canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1) 
    

    私が言ったように、これはイメージを示しています。それが助け場合は、次のよう

は、私がこのトップレベルウィンドウのために、これまで持っているコードです。理想的には、画像の横にある画像に関する情報の表がほしいと思います。

ありがとうございました!

答えて

1

テーブルの場合、値のあるレコードの行が必要であると仮定しています。このため私はTreeview Widget out of tkinter.ttkをお勧めします。

お互いに隣り合って座っていると、パイロット図の周りの灰色の境界線がグラフ自体の一部であるとみなされています(言い換えれば、テーブルを灰色の領域またはプロットキャンバスのいずれかに直接ドラッグします)。このため、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_netstableframeをラップすることができます親をフレームに変更する)。

私が言及するもう1つのことは、少なくともあなたが輸入品を含めば、誰にとっても簡単だということです。私は実際にmatplotlibの学習を始めました。これはあなたがそのライブラリを使っていることを推測できる唯一の理由でした(さらにTkAggウィジェットをインポートする方法を理解するためにいくつかのやり方をしなければなりませんでした)。私の経験では、(Numpyをどのようにインポートしたかのように)モジュールのリファレンスを維持するだけのメリットがあります。モジュールのコンテンツを直接インポートすることに問題があるかもしれません(matplotlib.backends.backend_tkagg import FigureCanvasTkAggから悪いですが、import *)。

"canvas.get_tk_widget()。grid(column = 0、row = 0)"の場合、ジオメトリエラーが発生しました。ソースを調べると、TkAggウィジェットは実際には文字通りパック自身を親にします。これは、ユーザがそのフレームのジオメトリマネージャを定義した場合、ジオメトリエラーにつながる自分自身のフレーム(実際に私がいる癖です)を実際に作成しないことを意味します(ただし、matplotlibを書いた人たち/ pyplotは私よりも確かに賢いので、そういう理由が考えられます)。

とにかく、これがあなたを助けてくれることを願っています。ご質問がある場合は私にお知らせください!

+0

大変ありがとうございます!これは絶対に完璧です。とても有難い! –

+0

喜んでください:)この質問に必要なものが他にない場合は、質問を「回答済み」とマークするために、回答の横にあるチェックマークを押すことができます –

関連する問題