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