2017-08-02 23 views
0

私は計算結果を表示するウィンドウをtkinterに作成しようとしています。グラフと小さなテーブルが必要です。私は彼らに必要な方法でそれらを手配することはできません。以下は例のコードです。この場合、グラフとテーブルは1つのみ表示します。tkinterのウィンドウ内のテーブルの場所を変更します。

import matplotlib 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 
from matplotlib.figure import Figure 
import tkinter as tk 
from tkinter import ttk 
import numpy as np 
import pandas as pd 

df1 = pd.DataFrame(np.random.randint(0,30,size=(15, 3)), columns=list('ABC')) 
df1['index'] = df1.index 

l1 = [1,2,3,4,5] 
l2 = [6,7,8,9,10] 
l3 = [100,200,300,400,500] 

root = tk.Tk() 
lf = ttk.Labelframe(root, text='Results') 
lf.grid(row=0, column=0, sticky='nwes', padx=3, pady=3) 

fig = Figure(figsize=(10,5), dpi=70) 
ax = fig.add_subplot(111) 

df1.plot(x='index', y=['A', 'B', 'C'], ax=ax) 

canvas = FigureCanvasTkAgg(fig, master=lf) 
canvas.show() 
canvas.get_tk_widget().grid(row=0, column=0) 

label = ttk.Label(root, text= 'Res_values') 
label.config(font=("Courier", 20)) 
label.place(x = 810, y = 70) 

li1 = l1 
li2 = l2 
li3 = l3 
list1 = tk.Listbox(root)  
list2 = tk.Listbox(root) 
list3 = tk.Listbox(root) 
for item in li1:    
    list1.insert(0,item) 

for item in li2:    
    list2.insert(0,item) 

for item in li3: 
    list3.insert(0,item) 

list1.grid(row=0, column=1)      
list2.grid(row=0, column=2) 
list3.grid(row=0, column=3) 

root.mainloop() 

コード実行の結果は次のようになります

pic1

Iテーブルが高く、グラフの近くに配置されたいと列が小さくなります。その

pic2

同様

は、それがこれを行うことは可能ですか?

pic3

UPDは私がどこ

label = ttk.Label(root, text= 'Res_values') 
label.config(font=("Courier", 20)) 
label.grid(row=0, column = 1, columnspan=3, sticky='N') 

そして

list1.grid(row=1, column=1, sticky='E'+'W')      
list2.grid(row=1, column=2, sticky='E'+'W') 
list3.grid(row=1, column=3, sticky='E'+'W') 

は、結果はこのようになりますテーブルを配置することが示されているコードの一部を変更しました

誰かが私が間違っていることを説明してもらえますか?

+1

あなたの編集に応答するには、 'LabelFrame'の' rowspan'引数を2に変更して、すべてがあなたの望むように再配置できるようにします。 – SneakyTurtle

答えて

1

gridという1つのジオメトリマネージャのみを使用し、placeではなく、gridを使用してください。これにより、必要なものなどのボックスのレイアウトを変更するときに重複するものはありません。

リストボックスを上に移動するには、gridを呼び出すときに、sticky=Nを引数として追加できます。これはlist1.grid(row=0, column=1, sticky=tk.N)のようになります。

"Res_values"テキストをリストボックスの上に保持するには、リストボックスを最初の行として追加し(リストボックスを2番目の行に変更し)、その列スパン引数を3にして中央に配置します途中で(ここにsticky=tk.E+tk.Wを追加する必要があるかもしれません)。

+0

私は1つのジオメトリマネージャのみを使用するという声明に同意しません。粘着部分はほぼ正しいです。 OPが 'import as tk'を使用していることを覚えておいてください。スティッキーが正しく動作するためには、tkinterをどのようにインポートしても常に動作するので、' sticky = tk.N'か、 "n"。 –

+0

@SierraMountainTech、この場合、OPがリストボックスの 'sticky'プロパティを変更しただけで、' place'を使っている 'Label'と重なることになります。 'grid'マネージャを使ってこれを並べ替えるだけではなく、並べ替えることはずっと難しくなります。 Tkをインポートするのは正しいです、更新しました。 – SneakyTurtle

+0

@SneakyTurtle答えをありがとう!問題のアップデートをご覧ください。私には困難があった。 –

関連する問題