[英]tkinter: How to have one labelframe under another expand as the page grows without leaving space between the two frames, using grid()
我提前向 tkinter 新手道歉。 我正在制作一個搜索工具來查找名字(用戶名),目前正在前端工作。 在進行這項工作時,我已經開始使用粘性來幫助不同的部分在用戶調整頁面大小時伸展。 我當前的問題是,當我向下/向南拉伸它時,在第一個頂部和底部 LabelFrame 之間創建了一堆空間。 我想要的是底部標簽框架隨着用戶拉伸頁面而拉伸,而不是讓它創建不需要的空間。
我為第二個框架使用了 sticky nsew,這樣它就可以隨着頁面增長而不會脫離頂部標簽框架。 我會讓頂部標簽框架粘在南邊,但這會使標簽框架隨着頁面向下拉伸而增長。 下面是我的代碼。
def query_window(conn):
window.destroy()
q_window = Tk()
q_window.title('Moniker Lookup')
q_window.columnconfigure(0, weight=1)
q_window.rowconfigure(0, weight=1)
path = os.path.realpath(
os.path.join(os.getcwd(), os.path.dirname(__file__)))
icon = PhotoImage(file = path + "..\\assets\main_icon.png")
q_window.iconphoto(False, icon)
#q_window.geometry("700x700")
#Create a search frame for the moniker search to sit in
search_frame = tk.LabelFrame(q_window, text='Moniker Search')
search_frame.rowconfigure(0, weight=1)
search_frame.columnconfigure(0, weight=1)
search_frame.grid(row = 0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nw")
#Create a results frame for the treeview widget to sit in.
output_frame = tk.LabelFrame(q_window, text='Results')
output_frame.rowconfigure(0, weight=1)
output_frame.columnconfigure(0, weight=1)
output_frame.grid(row = 1, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nsew")
#Create area for user to provide Moniker
moniker_label = tk.Label(search_frame, text="Moniker:")
moniker_label.grid(row=0, column = 2, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X)
moniker_field = tk.Entry(search_frame)
moniker_field.grid(row=0, column = 3, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, columnspan=2)
#Create a run button
run_button = tk.Button(search_frame, text="Run", command=lambda:
moniker_query(moniker_field, conn, q_window), width=10)
run_button.grid(row=0, column = 5, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X)
#Create a treeview to display output
tv1 = ttk.Treeview(output_frame)
tv1.columnconfigure(0, weight=1)
tv1.rowconfigure(0, weight=1)
#Create the tree scrolls
tree_scroll_y = tk.Scrollbar(output_frame, orient = "vertical", command=tv1.yview)
tree_scroll_x = tk.Scrollbar(output_frame, orient="horizontal", command=tv1.xview)
tv1.configure(xscrollcommand=tree_scroll_x.set, yscrollcommand=tree_scroll_y.set)
tv1.grid(row=0, column=0, pady = GLOBAL_PAD_Y, padx = GLOBAL_PAD_X, sticky="nsew")
tree_scroll_x.grid(row=1, column=0, sticky=tk.E+tk.W)
tree_scroll_x.grid_rowconfigure(0, weight=1)
tree_scroll_y.grid(row=0, column=1, sticky=tk.N+tk.S)
tree_scroll_x.grid_columnconfigure(0, weight=1)
此外,這是我的默認頁面打開時的樣子,然后是我拉伸頁面時的樣子。
您對.rowconfigure
有點困惑。 設置weight=1
時,調整大小來自父級。 我將它們移近了它們所影響的小部件。 沒錯, Scrollbar
的大小是.grid_rowconfigure
本身的一種方法。 這是一個工作示例。
from tkinter import *
from tkinter import ttk
GLOBAL_PAD_Y = 10
GLOBAL_PAD_X = 10
q_window = Tk()
q_window.title('Moniker Lookup')
q_window.geometry("250x200")
# path = os.path.realpath(
# os.path.join(os.getcwd(), os.path.dirname(__file__)))
# icon = PhotoImage(file=path + "..\\assets\main_icon.png")
# q_window.iconphoto(False, icon)
#q_window.geometry("700x700")
# Create a search frame for the moniker search to sit in
q_window.columnconfigure(0, weight=1)
search_frame = LabelFrame(q_window, text='Moniker Search')
search_frame.grid(row=0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="new")
# Create a results frame for the treeview widget to sit in.
q_window.rowconfigure(1, weight=1)
q_window.columnconfigure(0, weight=1)
output_frame = LabelFrame(q_window, text='Results')
output_frame.grid(row=1, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nsew")
# Create area for user to provide Moniker
search_frame.columnconfigure(0, weight=1)
search_frame.columnconfigure(1, weight=1)
search_frame.columnconfigure(2, weight=1)
moniker_label = Label(search_frame, text="Moniker:")
moniker_label.grid(row=0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky='e')
moniker_field = Entry(search_frame)
moniker_field.grid(row=0, column=1, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky='we')
# Create a run button
run_button = Button(search_frame, text="Run", command=lambda: print("run"), width=10)
run_button.grid(row=0, column=2, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky='w')
# Create a treeview to display output
output_frame.columnconfigure(0, weight=1)
output_frame.rowconfigure(0, weight=1)
tv1 = ttk.Treeview(output_frame)
tv1.grid(row=0, column=0, pady=GLOBAL_PAD_Y, padx=GLOBAL_PAD_X, sticky="nsew")
# Create the tree scrolls
tree_scroll_y = ttk.Scrollbar(output_frame, orient="vertical", command=tv1.yview)
tree_scroll_x = ttk.Scrollbar(output_frame, orient="horizontal", command=tv1.xview)
tree_scroll_x.grid(row=1, column=0, sticky="ew")
tree_scroll_y.grid(row=0, column=1, sticky="ew")
tree_scroll_y.grid_rowconfigure(0, weight=1)
tree_scroll_x.grid_columnconfigure(0, weight=1)
tv1.configure(xscrollcommand=tree_scroll_x.set, yscrollcommand=tree_scroll_y.set)
q_window.mainloop()
我了解到您銷毀了主應用程序窗口並創建了一個新窗口。 最好將 Toplevel 用於這些目的,最小化或隱藏主窗口,並僅在程序結束時銷毀它,因為主循環與它相關聯。
嘗試添加
q_window.rowconfigure(1, weight=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.