【问题标题】:GUI breaks on setting custom size of tkinter window?GUI 在设置 tkinter 窗口的自定义大小时中断?
【发布时间】:2021-11-17 10:53:55
【问题描述】:

我正在使用 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()

谁能帮忙?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    当您调整窗口大小时,网格几何管理器将为具有非零weight 的每一行和每一列分配额外空间。权重是成比例的,因此权重为 2 的列将获得两倍于权重为 1 的列的额外像素。默认情况下,所有列的权重为零。

    如果您希望为每列或每行指定一定百分比的额外可用空间,则需要为它们指定非零权重。如果您希望列或行具有相同的宽度或高度,您可以使用uniform 选项。具有相同uniform 值的所有行或列将具有统一的高度或宽度。

    由于您仅明确地为第一行和第一列赋予了非零权重,因此将为该行和列分配所有额外空间。这就是顶部条目小部件的宽度和高度增加,而第一列中的所有按钮都增加宽度的原因。

    在您的情况下,我猜您希望顶部条目小部件保持相同的高度,而所有按钮均等展开。为此,请删除您对 rowconfigurecolumnconfigure 的现有调用,并将它们替换为以下内容:

    root.grid_rowconfigure((1,2,3,4,5), weight=1, uniform="row")
    root.grid_columnconfigure((0,1,2,3), weight=1, uniform="column")
    

    【讨论】:

    • 非常感谢!您的回答完美解决了我的疑问。但我有另一个问题,如果我希望我的应用程序的文本也可以根据我的窗口大小调整大小,如果没有正式的方法可以做到这一点,我会将我的窗口设置为不可调整大小和我没有问题,只是出于好奇而问。再次感谢。
    • @AayushShukla:你绝对可以做到。但是,我无法在评论中回答这个问题。见stackoverflow.com/questions/12018540/…
    【解决方案2】:

    我认为这会对您有所帮助。我用 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()
    

    现在按钮正在使用画布调整大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2012-08-07
      • 2016-11-27
      • 1970-01-01
      相关资源
      最近更新 更多