簡體   English   中英

窗口頂部一幀,底部一幀

[英]One frame at top of window, one at bottom

我有兩個文本框,我希望第一個位於窗口的頂部,另一個在底部。 我正在使用python 2.7,這是我嘗試過的:

from Tkinter import *
import ttk

def main():
    root = Tk()
    root.title("Testing")

    root_frame = ttk.Frame(root, padding="3 3 3 3")
    root_frame.grid(column=0, row=0, sticky=(N, W, E, S))
    root_frame.columnconfigure(0, weight=1)
    root_frame.rowconfigure(0, weight=1)

    frame1 = ttk.Frame(root_frame, padding="3 3 3 3")
    frame1.grid(column=0, row=0, sticky=(N, W, E))
    frame1.rowconfigure(1, weight=1)
    frame1.columnconfigure(0, weight=1)

    frame2 = ttk.Frame(root_frame, padding="3 3 3 3")
    frame2.grid(column=0, row=1, sticky=(W, E, S))

    ttk.Label(frame1, text="This is frame 1").grid(column=0, row=0, sticky=(W, E))
    ttk.Label(frame2, text="This is frame 2").grid(column=0, row=0, sticky=(W, E))

    root.mainloop()

if __name__ == "__main__":
    main()

它將第二個文本框直接放在第一個文本框的下面。 我究竟做錯了什么?

謝謝

e:根據Bryan的建議,我又嘗試了兩件事:

使用不可見的中間行:

from Tkinter import *
import ttk

def main():
    root = Tk()
    root.title("Testing")

    root_frame = ttk.Frame(root, padding="3 3 3 3")
    root_frame.grid(column=0, row=0, sticky=(N, W, E, S))
    root_frame.grid_rowconfigure(1, weight=1)

    frame1 = ttk.Frame(root_frame, padding="3 3 3 3")
    frame1.grid(column=0, row=0, sticky=(N, W, E))

    frame2 = ttk.Frame(root_frame, padding="3 3 3 3")
    frame2.grid(column=0, row=2, sticky=(W, E, S))

    ttk.Label(frame1, text="This is frame 1").grid(column=0, row=0, sticky=(W, E))
    ttk.Label(frame2, text="This is frame 2").grid(column=0, row=0, sticky=(W, E))

    root.mainloop()

if __name__ == "__main__":
    main()

打包而不是網格:

from Tkinter import *
import ttk

def main():
    root = Tk()
    root.title("Testing")

    root_frame = ttk.Frame(root, padding="3 3 3 3")
    root_frame.grid(column=0, row=0, sticky=(N, W, E, S))

    frame1 = ttk.Frame(root_frame, padding="3 3 3 3")
    frame1.pack(side="top", fill="x")

    frame2 = ttk.Frame(root_frame, padding="3 3 3 3")
    frame2.pack(side="bottom", fill="x")

    ttk.Label(frame1, text="This is frame 1").grid(column=0, row=0, sticky=(W, E))
    ttk.Label(frame2, text="This is frame 2").grid(column=0, row=0, sticky=(W, E))

    root.mainloop()

if __name__ == "__main__":
    main()

兩者的行為仍與我的原始代碼相同。

如果要在頂部放置一個,在底部放置一個,最簡單的解決方案是使用pack因為它旨在將小部件放在容器的邊緣。 例如:

frame1.pack(side="top", fill="x")
frame2.pack(side="bottom", fill="x")

如果要使用網格,我將在行0的頂部放置第1行,在行2的底部放置第1行,然后將其空的第1行配置為占用所有額外空間:

frame1.grid(row=0, sticky="ew")
frame2.grid(row=2, sticky="ew")
root_frame.grid_rowconfigure(1, weight=1)

在任何一種情況下,您還必須確保將這些小部件放入的框架正確包裝/固定。 上面的代碼有效,但是您沒有這樣做,因此它們的父對象也將展開以填充整個窗口。

由於您正在使用gridroot_frame放在root內,因此請確保root_frame在的行和列具有權重:

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

暫無
暫無

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

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