我正在使用Tkinter为应用程序设计UI。我在使用网格几何体并指定按钮宽度(或任何小部件宽度)时,我意识到宽度应该以文本单位而不是像素来指定。因为我想让它独立于平台并且屏幕尺寸无关是否有任何方法可以获得最大文本单位宽度?所以我可以在此基础上做数学。
例如:
我连续10个按钮,宽度相等。如果我硬编码特定于当前屏幕值的宽度值,它将无法在差异屏幕上工作。
感谢。
答案 0 :(得分:7)
使用tkinter.font
包可以创建Tk字体对象来定义字体并调用measure
方法以使用该字体获取文本的屏幕宽度。
import tkinter as tk
import tkinter.font as tkfont
root = tk.Tk()
font = tkfont.Font(family="Consolas", size=10, weight="normal")
m_len = font.measure("m")
对于等宽字体,任何角色都可以。对于比例文本,如果给出整个字符串,则获得字符串的屏幕长度。否则,您通常会将 m 或 n 的大小设置为最大或平均字符宽度。
但是,按钮在许多UI样式上的大小通常都相同。改变按钮尺寸可能看起来很差。您可以指定负宽度以设置窗口小部件的minimum宽度,这可能会有所帮助。
答案 1 :(得分:5)
如果您想制作一个“独立于平台且与屏幕尺寸无关”的GUI,您绝对不想要自己测量尺寸。除非,通过说你想要一些独立于平台的东西,你说你想要一个按钮是X像素,无论像素密度或屏幕分辨率如何(这似乎是一个非常糟糕的主意)。
tkinter支持以字符为单位进行测量的全部原因,以及用于拉伸和缩小的小部件的选项,是为了支持平台独立性。当您开始在像素级别工作时,在其他平台或其他显示器上运行代码或使用其他字体时,您将遇到许多问题。
话虽这么说,字体的measure
方法可以准确地告诉您给定字符串在给定字体中需要多少像素。如果你想知道“一个字符”有多宽,你可以在字符串measure
上使用"0"
方法,这是tkinter在根据字符计算宽度时用作基础的方法。
如果您希望按钮的大小完全相同,则使用字符宽度将为您提供,因为它不是该小部件中10个实际字符的宽度,而是十个平均字符宽度。在这种情况下,无论该小部件的内容是什么,“10个字符”对于每个小部件都是相同的。
答案 2 :(得分:1)
您必须拥有像
这样的根变量import tkinter as tk
root = tk.Tk()
您可以使用root.winfo_sccreenwidth()
作为宽度
width = root.winfo_screenwidth() #width of screen
height = root.winfo_screenheight() # height of screen
我不确定以文本单位获取屏幕宽度的方法,甚至可能无法实现。
解决方案是能够以像素为单位指定按钮宽度,您可以通过遵循给定here的简单示例来实现此目的。
你做的是 - 将Button小部件放在一个框架中并指定框架的高度和宽度,然后使框架不使用grid_propagate(False)
为框架传播大小,然后使按钮展开到框架框架(可能使用网格sticky="we"
)