簡體   English   中英

小部件和LablelFrames的Python Tkinter網格間距不正確

[英]Python Tkinter grid spacing of widgets and LablelFrames not right

我正在Python 2.7 Tkinter中設計一個簡單的GUI,但是我無法按照自己的意願進行擴展。 我設法將各種小部件大致放置在所需的位置,但是我似乎無法強行將其間隔開,並且事情有些混亂。

我還嘗試繪制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()

我嘗試了各種更改,但無法釘牢! 任何幫助將非常感激。

首先,列/行適應那里的內容,所以一個空的高度/寬度為零。 如果要在小部件之間放置空間,請使用.grid方法中的padxpady選項。 它們可以采用一個可以在兩側填充的數字,也可以采用兩個可以在兩側填充的數字。

其次,如果您希望小部件位於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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM