[英]tkinter columconfigure and rowconfigure
我想了解 tkinter 中的網格布局。 假設如果有額外空間,我希望第 1 行中的第 1 列擴展,但第 2 行中的第 1 列不擴展我該怎么做?
widget.columnconfigure
讓您控制所有列,無法指定行。
您不能完全按照自己的意願做。 但是,通過使第1行中的小部件跨越兩列,而第2行中的小部件僅跨越一列,您可以獲得相同的視覺效果。 然后,您可以將權重賦予第二列,這將影響第1行的小部件,但不會影響第二行的小部件。
這是一個簡單的例子:
import tkinter as tk
root = tk.Tk()
l1 = tk.Frame(root, background="red", width=100, height=50)
l2 = tk.Frame(root, background="orange", width=100, height=50)
l3 = tk.Frame(root, background="green", width=100, height=50)
l4 = tk.Frame(root, background="blue", width=100, height=50)
root.columnconfigure(2, weight=1)
l1.grid(row=1, column=1, columnspan=2, sticky="ew")
l2.grid(row=1, column=3, sticky="ew")
l3.grid(row=2, column=1, sticky="ew")
l4.grid(row=2, column=3, sticky="ew")
root.mainloop()
這段代碼首次啟動時,看起來兩列大小相同。
調整窗口大小后,您可以看到第1行的小部件展開了,但第2行的小部件沒有展開。
您可能正在尋找columnpan選項。
使用兩張畫布,每行一張。 然后更改要擴展的小部件的寬度和列跨度。 最后,用戶列配置。 在以下示例中,我創建了 2 個畫布、2 個框架、2 個按鈕。 每行一個。
import tkinter as tk
root = tk.Tk()
root.geometry("600x300")
root.resizable(False,False)
canvas_1 = tk.Canvas(master=root,width=600, height=15)
canvas_2 = tk.Canvas(master=root)
canvas_1.pack(expand=True, fill="both")
canvas_2.pack(expand=True, fill="both")
#
frame_1 = tk.Frame(master=root)
frame_1.pack(expand=True, fill="both")
# ------------------------------------------------------ All in row=0
button_in_column_0 = tk.Button(master=frame_1, text="I'm in Column_1").grid(row=0, column=1)
button_in_column_1 = tk.Button(master=frame_1, text="I'm in Column_2",width=80).grid(row=0, column=2,columnspan=2)
button_in_column_2 = tk.Button(master=frame_1, text="I'm in Column_3").grid(row=0, column=3)
# -----Let's say that you want the column 1 in the row 0 to expand if there is extra space
for x in range(2,3):
frame_1.columnconfigure(x, weight=1)
frame_1.rowconfigure(x, weight=1)
# LET CREATE THE SECOND LINE WITH LIST OF BUTTONS
frame_2 = tk.Frame(master=root)
frame_2.pack(expand=True, fill="both")
# ------------------------------------------------------------ All in row=0
button_1 = tk.Button(master=frame_2, text="I'm in Column_1").grid(row=0, column=1, sticky=tk.NSEW)
button_2 = tk.Button(master=frame_2, text="I'm in Column_2").grid(row=0, column=2, sticky=tk.NSEW)
button_3 = tk.Button(master=frame_2, text="I'm in Column_3").grid(row=0, column=3, sticky=tk.NSEW)
window_1 = canvas_1.create_window(0,1, anchor="nw", window=frame_1)
window_2 = canvas_2.create_window(0,1, anchor="nw", window=frame_2)
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.