2017-02-04 41 views
0

Python 2.7 Tkinterで簡単なGUIを設計していますが、私が望むように広げることができません。私は私がそれらを望むところで私の様々なウィジェットを手に入れることができましたが、私は間隔をずらすようには思えませんし、物事はちょっと束ねられています。Python TkinterのウィジェットとLablelFramesのグリッド間隔が正しくない

また、3つのLabelFramesを描画してウィンドウを分割しようとしましたが、ウィジェットがLabelFramesに表示されるようです。私はこれを少し上回ることができますかと思います。グリッドシステムは、物事を束ねることを可能にし、私が見る限り、空の行と列を無視します。

from Tkinter import * 
import Tkinter, Tkconstants, tkFileDialog, tkMessageBox 

class FileZap(): 
    def __init__(self, root): 


     root.title("TestGUI") 
     root.geometry("860x450")  

     self.topFrame = LabelFrame(root, text="Top Area") 
     self.topFrame.grid(row=1, column=1, rowspan=6, columnspan=7, padx=5, pady = 5, sticky="NSEW") 

     self.listbox1 = Listbox(root, width=50, selectmode="multiple") 
     self.listbox1.grid(row=3, column=2) 
     self.scrollbar = Scrollbar(orient=VERTICAL, command=self.listbox1.yview) 
     self.listbox1.config(yscrollcommand=self.scrollbar.set) 
     self.scrollbar.grid(row=3, column=3, sticky="ns") 
     self.listbox2 = Listbox(root, width=50) 
     self.listbox2.grid(row=3, column=4) 
     self.selectLabel = Label(root, text="Select a folder: ") 
     self.selectLabel.grid(row=3, column=1) 
     self.user1 = Entry(root, width="50") 
     self.user1.grid(row=2, column=2) 
     self.browse = Button(root, text="Browse") 
     self.browse.grid(row=2, column=3) 
     self.addItems = Button(root, text="Add to Selection") 
     self.addItems.grid(row=4, column=2) 
     self.clearItems = Button(root, text="Clear Selection") 
     self.clearItems.grid(row=4, column=4) 

     self.leftFrame = LabelFrame(root, text="Left Area") 
     self.leftFrame.grid(row=5, column=1, rowspan=6, columnspan=3, padx=5, pady = 5, sticky="NSEW") 

     self.replaceInLable = Label(root, text="String to replace: ") 
     self.replaceOutLable = Label(root, text="New string: ") 
     self.replaceInLable.grid(row=7, column=1) 
     self.replaceOutLable.grid(row=7, column=2) 
     self.replaceIn = Entry(root, width="20") 
     self.replaceOut = Entry(root, width="20") 
     self.replaceIn.grid(row=8, column=1) 
     self.replaceOut.grid(row=8, column=2) 
     self.replace = Button(root, text="Replace") 
     self.replace.grid(row=8,column=3) 

     self.rightFrame = LabelFrame(root, text="Right Area") 
     self.rightFrame.grid(row=5, column=4, rowspan=6, columnspan=3, padx=5, pady = 5, sticky="NSEW") 

     self.quit = Button(root, text="Exit", command=root.quit) 
     self.quit.grid(row=9, column=6) 

root = Tkinter.Tk() 
file_zap = FileZap(root) 
root.mainloop() 

私は様々な変更を試みましたが、それを釘付けできません。どんな助けでも大歓迎です。

+0

ウィンドウのサイズを変更したらどうしますか?上のフレームが余分なスペースを占めるべきか?すべてのフレームが余分なスペースを均等に占有する必要がありますか?余分なスペースを必要とするフレームはありませんか? –

答えて

1

最初に、列/行がコンテンツに適合するように、ゼロ高さ/幅として空の列が作成されます。あなたのウィジェットの間にスペースを入れたい場合はpadxpadyオプションを.gridメソッドで使用してください。彼らは両側に詰め物を与える1つの番号か、それぞれの側に詰め物を与える2つの番号のいずれかを取ることができます。

第2に、ウィジェットをLabelFrame内に入れたい場合は、このLabelFrameをメインウィンドウではなくマスターとして作成する必要があります。

from Tkinter import LabelFrame, Tk, Button, Label 

root = Tk() 
# make row 0 resize with the window 
root.rowconfigure(0, weight=1) 
# make column 0 and 1 resize with the window 
root.columnconfigure(0, weight=1) 
root.columnconfigure(1, weight=1) 
# create LabelFrames 
top_frame = LabelFrame(root, text="top") 
left_frame = LabelFrame(root, text="left") 
right_frame = LabelFrame(root, text="right") 

top_frame.grid(row=0, column=0, columnspan=2, padx=10, pady=(10,4), sticky="nsew") 
left_frame.grid(row=1, column=0, padx=(10,4), pady=4, sticky="nsew") 
right_frame.grid(row=1, column=1, padx=(4,10), pady=4, sticky="nsew") 

#create widgets inside top_frame 
Label(top_frame, text="I'm inside top_frame").pack() 
Button(top_frame, text="Top").pack() 
#create widgets inside left_frame 
Label(left_frame, text="I'm inside left_frame").pack() 
Button(left_frame, text="Left").pack() 
#create widgets inside top_frame 
Label(right_frame, text="I'm inside right_frame").pack() 
Button(right_frame, text="Right").pack() 

Button(root, text="Quit", command=root.destroy).grid(row=2, column=0, 
                columnspan=2, pady=10) 

root.mainloop() 
+0

ありがとうございました。私はこの戦略を私のGUIに適応させ、いくつかの調整の後、非常にうまくいっています。 – JamesPy

+0

ソリューションのサイズがウィンドウで変更されません。 –

関連する問題