我正在使用 Tkinter 創建一個計算器應用程式,并且我已經在其中包含了所有有用的按鈕。但問題是,每當我使用geometry()方法將Tkinter 視窗調整為自定義大小時,所有按鈕都不會以相同的比例放大。準確地說,第一列中的按鈕拉伸很多,而其他按鈕的大小與它們相同。有沒有辦法解決所有這些問題,因為在默認大小中包含更多內容變得越來越困難。
以下是一些影像:
沒有自定義幾何圖形 -使用自定義幾何圖形 (800x800)-

這是有用的代碼:
root = Tk()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.resizable(False, False)
segoe_font = tkFont.Font(family='Segoe UI', size=16)
segoe_font_ac = tkFont.Font(family='Segoe UI', size=8)
entry_text = StringVar()
inout = Entry(root, textvariable=entry_text)
inout.grid(row=0, column=0, columnspan=4, sticky="nsew")
button18 = Button(root, text="AC", command=allclear, font=segoe_font_ac).grid(row=1, column=0, sticky="nsew")
button1 = Button(root, text="C", command=clear, font=segoe_font).grid(row=1, column=1, sticky="nsew")
button2 = Button(root, text="/", command=divide, font=segoe_font).grid(row=1, column=2, sticky="nsew")
button3 = Button(root, text="×", command=multiply, font=segoe_font).grid(row=1, column=3, sticky="nsew")
button5 = Button(root, text="7", command=tsev, font=segoe_font).grid(row=2, column=0, sticky="nsew")
button6 = Button(root, text="8", command=teig, font=segoe_font).grid(row=2, column=1, sticky="nsew")
button7 = Button(root, text="9", command=tnin, font=segoe_font).grid(row=2, column=2, sticky="nsew")
button4 = Button(root, text="-", command=minus, font=segoe_font).grid(row=2, column=3, sticky="nsew")
button9 = Button(root, text="4", command=tfou, font=segoe_font).grid(row=3, column=0, sticky="nsew")
button10 = Button(root, text="5", command=tfiv, font=segoe_font).grid(row=3, column=1, sticky="nsew")
button11 = Button(root, text="6", command=tsix, font=segoe_font).grid(row=3, column=2, sticky="nsew")
button8 = Button(root, text=" ", command=plus, font=segoe_font).grid(row=3, column=3, sticky="nsew")
button12 = Button(root, text="1", command=tone, font=segoe_font).grid(row=4, column=0, sticky="nsew")
button13 = Button(root, text="2", command=ttwo, font=segoe_font).grid(row=4, column=1, sticky="nsew")
button14 = Button(root, text="3", command=tthr, font=segoe_font).grid(row=4, column=2, sticky="nsew")
button15 = Button(root, text="=", command=equals, font=segoe_font).grid(row=4, column=3, rowspan=2, sticky="nsew")
button16 = Button(root, text="0", command=tzer, font=segoe_font).grid(row=5, column=0, columnspan=2, sticky="nsew")
button17 = Button(root, text=".", command=decimal, font=segoe_font).grid(row=5, column=2, sticky="nsew")
entry_text.trace("w", lambda *args: character_limit_and_check_entered_value(entry_text))
root.mainloop()
任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
我想這會對你有所幫助。我用 6 個按鈕做了一個簡單的例子,但我認為你會設法為你的情況做到這一點。所以我認為最好的選擇是使用 Grid.rowconfigure 和 Grid.columnconfigure 函式。
示例代碼:
from tkinter import *
root = Tk()
root.title("resize button")
root.geometry("500x500")
# here you need to put on what do you want to use row configure, index(row) and weight
Grid.rowconfigure(root, 0, weight=1) # we use on root, row=0 weight=1
Grid.columnconfigure(root, 0, weight=1)
#configure 2nd row
Grid.rowconfigure(root, 1, weight=1)
#configure 3rd row
Grid.rowconfigure(root, 2, weight=1)
#configure 2nd column
Grid.columnconfigure(root, 1, weight=1)
button1 = Button(root, text="Button1")
button2 = Button(root, text="Button2")
button3 = Button(root, text="Button3")
button1.grid(row=0, column=0, sticky="nsew")
button2.grid(row=1, column=0, sticky="nsew")
button3.grid(row=2, column=0, sticky="nsew")
button1_1 = Button(root, text="Button1_1")
button2_1 = Button(root, text="Button2_1")
button3_1 = Button(root, text="Button3_1")
button1_1.grid(row=0, column=1, sticky="nsew")
button2_1.grid(row=1, column=1, sticky="nsew")
button3_1.grid(row=2, column=1, sticky="nsew")
root.mainloop()
現在按鈕正在使用畫布調整大小。
uj5u.com熱心網友回復:
當您調整視窗大小時,網格幾何管理器將為具有非零值的每一行和每一列分配額外的空間weight。權重是成比例的,因此權重為 2 的列獲得的額外像素是權重為 1 的列的兩倍。默認情況下,所有列的權重都為零。
如果您希望每一列或每一行都有一定比例的額外可用空間,您需要給它們一個非零的權重。如果您希望列或行具有相同的寬度或高度,您可以使用該uniform選項。具有相同uniform值的所有行或列將具有統一的高度或寬度。
由于您明確地僅對第一行和第一列賦予非零權重,因此該行和列將被分配所有額外空間。這就是為什么頂部條目小部件的寬度和高度都會增加,而第一列中的所有按鈕的寬度都會增加。
在您的情況下,我猜您希望頂部條目小部件保持相同的高度,而所有按鈕均等地展開。為此,請洗掉對rowconfigure和的現有呼叫columnconfigure并將其替換為以下內容:
root.grid_rowconfigure((1,2,3,4,5), weight=1, uniform="row")
root.grid_columnconfigure((0,1,2,3), weight=1, uniform="column")

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360450.html
