【问题标题】:How to set my widgets' size dynamically to fit window in Tkinter?如何动态设置我的小部件的大小以适应 Tkinter 中的窗口?
【发布时间】:2021-05-04 11:10:35
【问题描述】:

我的桌面分辨率是 1920x1080,我正在为相同的环境进行开发,1440x900 或更小(这取决于用户的屏幕分辨率) 当我使用 1920x1080 分辨率时,所有小部件都可见,但当分辨率改变时,某些小部件不可见。但是我使用了网格方法。怎么办?

这是一个示例代码:

from tkinter import *
import tkinter as tk


root = Tk()
width=1440
height=900
root.geometry('%dx%d+0+0' % (width,height))
print(width, height)

frame1=LabelFrame(root, text="frame1")

frame2=LabelFrame(root, text="frame2")

frame1.pack(fill="both", expand="yes", padx=20, pady=10)

frame2.pack(fill="both", expand="no", padx=20, pady=10)



abc=StringVar()
Label(frame2, text="A").grid(row=1, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=1, padx=5, pady=3,sticky="nsew")

Label(frame2, text="B").grid(row=1, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=3, padx=5, pady=3,sticky="nsew")

Label(frame2, text="C").grid(row=1, column=4, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=5, padx=5, pady=3,sticky="nsew")

Label(frame2, text="D").grid(row=1, column=6, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=1, column=7, padx=5, pady=3,sticky="nsew")



Label(frame2, text="E").grid(row=2, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=1, padx=5, pady=3,sticky="nsew")

Label(frame2, text="F").grid(row=2, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=3, padx=5, pady=3,sticky="nsew")

Label(frame2, text="G").grid(row=2, column=4, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=5, padx=5, pady=3,sticky="nsew")

Label(frame2, text="H").grid(row=2, column=6, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=2, column=7, padx=5, pady=3,sticky="nsew")



Label(frame2, text="I").grid(row=4, column=0, padx=5, pady=3)
bla=Text(frame2, width=220, height=2.5, font=("Calibri", 14))
bla.grid(row=4, column=1, columnspan=11, padx=5, pady=3, sticky="nsew")

Label(frame2, text="J").grid(row=3, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=3, column=1, padx=5, pady=3,sticky="nsew")



Label(frame2, text="K").grid(row=3, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=3, column=3, padx=5, pady=3,sticky="nsew")


Label(frame2, text="L").grid(row=5, column=0, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=1, padx=5, pady=3,sticky="nsew")

Label(frame2, text="M").grid(row=5, column=2, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=3, columnspan=2, padx=5, pady=3,sticky="nsew")

Label(frame2, text="N").grid(row=5, column=5, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=6, padx=5, pady=3,sticky="nsew")

Label(frame2, text="O").grid(row=5, column=7, padx=5, pady=3)
Entry(frame2, textvariable=abc).grid(row=5, column=8,columnspan=3, padx=5, pady=3,sticky="nsew")


root.mainloop()

谢谢你

【问题讨论】:

  • 为什么不更改条目的width 或更改标签+条目的font?您还可以删除放置在那里的填充。
  • 你好蜥蜴。谢谢你。但是我怎么知道适合所有屏幕的宽度呢?
  • 您必须创建自己的代码来执行此操作或只是猜测。
  • 所以没有自动调整按钮大小的功能,自动调整图像?
  • 不。 tkinter 不会自动调整 tk.Entrytk.Label 的大小。您可以使用 tkinter 获取屏幕的宽度/高度,然后基于此添加小部件。

标签: python tkinter resize


【解决方案1】:

问题在于您将文本小部件的宽度明确设置为 220 个字符。根据字体的不同,这可能会使小部件的宽度超过 1440 像素。在我的机器上,小部件最终是 1988 像素。正因为如此,它会强制列比窗口容纳的更宽。

在这种特定情况下,简单的解决方案似乎是显式设置文本小部件的大小。让它保持自然大小,让几何管理器使其扩展以填充窗口。如果确实需要 220 个字符宽,则需要将字体变小以适应窗口的限制。

作为一般经验法则,您应该将小部件的大小设置为所需的最小大小,并让几何管理器控制它们的大小以填充任何额外的空间。

【讨论】:

  • 谢谢。但是“让几何管理器使它扩大以填充窗口”怎么做呢?我希望文本小部件扩展到屏幕宽度。但是当我这样做时,它会掩盖下面的条目或按钮......
  • @Béa:您可以通过使用fillexpandpackstickygrid_rowconfiguregrid_columconfigure 与@987654327 等选项让几何管理器处理它@,以及相对位置、宽度和高度与place
  • 请举个例子......我尝试使用网格方法,但文本小部件没有扩展到屏幕宽度(在第二帧中)
【解决方案2】:

【讨论】:

  • 我在 tkinter 中编写了整个程序......现在很难改变
  • 抱歉,我忘记附上链接了……现在可以阅读了
  • 我已经看到了这篇文章,但我找不到解决方案
猜你喜欢
  • 2020-11-11
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多