2017-06-20 8 views
3

無視されます。望ましいレイアウトは次のとおりです。グリッド・マネージャ:columnspanは、私はTkinterののグリッド・マネージャを使用して、ウィンドウの特定のレイアウトを取得しようとしています

_______________________________________________________ 
|     |     |     | 
|     |     |     | 
| canvas A  | canvas B  | canvas C  | 
|     |     |     | 
|     |     |     | 
|------------------------------------------------------ 
| B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | 
| ____|_____|_____|_____|_____|_____|_____|_____|_____| 

ここで、Bは9つのボタンのうちの1つを表します。以下のコードは近づいてきますが、カンバスAとCは単にcolumnspan=3引数を無視しますが、キャンバスBはそれを正しく使用しています。

import matplotlib 
matplotlib.use('TkAgg') 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 
import Tkinter as Tk 

def generate_window(): 
    root = Tk.Tk() 
    root.rowconfigure((0,1), weight=1, minsize=35) 
    root.columnconfigure((0,8), weight=1, minsize=200) 

    titles = ['A', 'B', 'C']  
    for t, n in zip(titles, xrange(1, 4)): 
     fig = plt.figure() 
     ax = fig.add_subplot(111) 
     ax.plot([1,2,3,4], [1,4,9,16], 'ro') 
     ax.set_title(t) 
     canvas = FigureCanvasTkAgg(fig, master=root) 
     canvas.get_tk_widget().grid(row=0, column=(n-1)*3, columnspan=3, sticky='NSEW') 

    for x in xrange(0, 9): 
     Tk.button = Tk.Button(master=root, text=str(x), command= lambda x=x:button(x)) 
     Tk.button.grid(row=1, column=x, sticky='NSEW') 
    Tk.mainloop() 

def button(button_number): 
    print button_number 



generate_window() 

This同様言い回しの質問は、この問題を解決していませんここには空の列

+2

私は問題を理解していません。それは私には3つの柱にまたがるキャンバスのように見えます。列の幅が異なるため、列のサイズが異なりますが、列数を2つにするだけなので意図しているようです。ちなみに、matplotlibへの依存関係を削除した場合、この質問に答える方がはるかに簡単です。空のキャンバスを使うだけです。 –

+0

ああ、私は 'columnconfigure'がうまく動作していると誤解しました。私はそれが各列に重みを適用していると思った。その効果に対する回答を追加すると私は受け入れます。ありがとう。 –

答えて

2

がないので、あなただけの列のカップルに列重みを適用しているので、あなたが等しくない列幅で終わります。あなたはすべての列が同じサイズになりたい場合は、最も簡単な解決策は、それらをすべて等しい重みを与え、および/またはuniformオプションを使用することです。例えば

root.columnconfigure((0,1,2,3,4,5,6,7,8), weight=1) 
関連する問題