簡體   English   中英

tkinter columconfigure 和 rowconfigure

[英]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選項。

參見http://effbot.org/tkinterbook/grid.htm

使用兩張畫布,每行一張。 然后更改要擴展的小部件的寬度和列跨度。 最后,用戶列配置。 在以下示例中,我創建了 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.

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