2017-10-25 11 views
0

フレーム内のボタンのジオメトリと別のフレーム内のエントリを処理しようとしているコードがあります。しかし、彼らは両方の子供たちのメインウィンドウとは独立して動作するようには見えません。上記のコードで ジオメトリをモジュール式で管理することはできますか?

try:      # In order to be able to import tkinter for 
    import tkinter as tk # either in python 2 or in python 3 
except ImportError: 
    import Tkinter as tk 


class NumPad(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.button = tk.Button(text=0) 
     self.button.grid(row=1, column=0, sticky='nsew') 


class CalcFrame(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.entry = tk.Entry(self) 
     self.entry.pack() 


if __name__ == '__main__': 
    root = tk.Tk() 
    frame1 = CalcFrame(master=root) 
    frame2 = NumPad(master=root) 
    frame1.grid(row=0, column=0) 
    frame2.grid(row=1, column=0, sticky='nsew') 
    root.mainloop() 

私は交換する場合:

​​

で:frame2

self.button.grid(row=1, column=0, sticky='nsew') 

ウィジェットがframe1にウィジェットと重なります。ウィジェット単位でインナーグリッドを作成するにはどうすればよいですか?今のところトップレベルのグリッドが1つしかないようです。

ブライアンオークリーは、上記のコメントで指摘したよう
+0

まあ、あなたが何を持っているようですあなたがその変更をしないと欲しいですから、変更する理由は? –

+1

ボタンに親/マスターを指定していないため、デフォルトはルートウィンドウになります。 –

+0

@BryanOakleyはい私は、ボタンのこの設定マスターパラメータを解決することができたと思う、ありがとう! – Nae

答えて

2

、あなたがこの行にButtonウィジェットを宣言するときに...

self.button = tk.Button(text=0) 
あなたはそれをそれだけで Tk()に自分自身をダンプすることを意味し、親を割り当てていない

デフォルトではウィンドウです。サイドノートでは

、あなたは自分の名前でどの変数彼らはFrameウィジェット(すなわちframe1frame2)であることを示唆しているが、実際には、これまでFrameウィジェットを使用していないクラスへの参照であるように思われています。

Frameウィジェットは非常に強力で、同じウィンドウ内のウィジェットのセットを簡単に分離するために使用できます。 Framesを使用した例を以下に見つけることができます:

from tkinter import * 

root = Tk() 

frame1 = Frame(root, borderwidth=1, relief="solid") 
frame2 = Frame(root, borderwidth=1, relief="solid") 

frame1.pack(side="left", fill="both", expand=True, padx=10, pady=10) 
frame2.pack(side="right", fill="both", expand=True, padx=10, pady=10) 

label1 = Label(frame1, text="I'm inside a frame") 
label2 = Label(frame2, text="I'm inside a different frame") 

label1.pack() 
label2.pack() 

root.mainloop() 

これは、あなたが彼らの両親に異なるジオメトリマネージャを使用してウィジェットを持つことができることを示しています

from tkinter import * 

root = Tk() 

frame1 = Frame(root) 
frame2 = Frame(root) 

frame1.pack(side="left") 
frame2.pack(side="right") 

label1 = Label(frame1, text="I'm grid") 
label2 = Label(frame1, text="I'm grid") 
label3 = Label(frame2, text="I'm pack") 
label4 = Label(frame2, text="I'm pack") 

label1.grid(row=0, column=0) 
label2.grid(row=0, column=1) 
label3.pack() 
label4.pack() 

root.mainloop() 
+0

まだ、.packでジオメトリが管理されているウィジェットを持つグリッドフレームにはまだグリッドフレームを表示できません。これは正常ですか? – Nae

+1

@Nae私はあなたが最も確かにその親とは異なるジオメトリマネージャを持つウィジェットを持つことができることを証明するために私の答えを更新しました。あなたができないことは、同じ親の中に複数のジオメトリ・マネージャがあることです。 –

関連する問題