【问题标题】:TKInter - The text in the label changes window's widthTKInter - 标签中的文本改变窗口的宽度
【发布时间】:2014-11-18 12:52:43
【问题描述】:

我正在使用 tkinter 工具包在 python 中构建一个计算器。问题在于,当在计算器中输入文本(并添加到支持计算的标签中)时,窗口的整个宽度会发生变化并变长。我该怎么做才能解决它?

下面是代码的一些重要部分:(主类继承自tk.Frame)

labelStyle = {"padx":10, "pady":10, "justify":"left"}
calculationsLabel = tk.Label(self, text="", **labelStyle)
calculationsLabel.grid(row=0, column=1, **gridStyle)
self.master.resizable(0,0)
self.pack(padx=5, pady=5)
self.calculationsLabel=calculationsLabel

for number in range(9,0,-1):
        ...
        tk.Button(self, ...).grid(...)

说明问题的图片:

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    你需要做几件事来防止标签改变窗口大小:

    1. 为标签指定宽度 1(一)。通过 not 给标签一个宽度,你隐含地说“当文本变大时变大”。通过给它一个明确的宽度,你是在说“不管文本有多大,如果文本更大就不要增长”。
    2. 对网格使用columnspan 选项,以使标签所在的单元格跨越按钮网格的宽度。使用粘性选项,这样即使标签只要求一个字符的宽度,网格也会强制它变得足够宽以适应空间。

    【讨论】:

    • 感谢您的评论。还有一件事:如何显示最后输入的数字?当用户键入长表达式时,焦点不是最后一个数字,而是第一个数字。我该如何解决?
    【解决方案2】:

    您可以使用columnspan 参数让标签延伸到所有列的顶部,而不是延伸第一列。添加到您的网格方法:

    calculationsLabel.grid(row=0, column=1, columnspan=7 **gridStyle)
    

    (将 7 替换为您实际拥有的列数)

    【讨论】:

    • 非常感谢!有用。但是当文本长于窗口宽度时,宽度仍然会发生变化。
    【解决方案3】:

    您可以使用gridcolumnspan 选项使标签跨越计算器的整个宽度。
    然后,如果您希望数字位于左侧,请在 Label 中使用 anchor=W

    只有当Label 比整个窗口长时,窗口才会展开。您甚至可以使用Labelwidth 选项来防止这种情况发生。

    【讨论】:

    • 非常感谢!有用。但是当文本长于窗口宽度时,宽度仍然会发生变化。
    • width=x 添加到您的 labelStyle 以强制其宽度为 x 个字符。试试 x 的哪个值适合您的计算器。
    猜你喜欢
    • 2023-01-25
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多