我正在使用 wxPython 开发一个应用程序。该应用程序的一部分在网格中创建大量 TextCtrl,以便为任意大的人员列表输入一周中的每一天的四字母代码。
我已经设法让它发挥作用,但我不得不做一些笨拙的事情。具体来说,我还没有找到一种好的方法来计算一段文本有多大(以像素为单位),因此我必须猜测 TextCtrl 的大小,以便适合最大的(4 个字母)代码。我担心的是,如果文本的大小发生变化,或者应用程序被移植到 MSW 以外的其他地方,我的布局可能会被破坏。
我找到的解决方案是创建一个 StaticText 对象,用 4 个大字母填充它,获取它的大小,然后 .Destroy() 它。这确实可行,但看起来确实是一个笨拙的解决方案。有谁有更直接的方法来计算 TextCtrl 中的任意文本字符串有多大?我查看了文档,但找不到任何东西,而且我还没有看到任何示例可以完全实现我想要做的事情。
下面是一个小代码示例(显示测试方法):
# This creates and then immediately destroys a static text control
# in order to learn how big four characters are in the current font.
testst = wx.StaticText(self, id = wx.ID_ANY, label = "XXXX")
self.fourlettertextsize = testst.GetClientSize() + (4,4)
testst.Destroy()
(+ (4,4) 部分是在控件中添加更多的空间以容纳光标,并在 TextCtrl 的工作区中添加一点边框;这是我不想直接做的另一件事。)
创建一个wx.Font实例,包含字体、大小等;创建一个wx.DC;然后调用 dc.GetTextExtent("a text string") 来获取显示该字符串所需的宽度和高度。相应地设置网格中的行高和列宽。
就像是:
font = wx.Font(...)
dc = wx.DC()
dc.SetFont(font)
w,h = dc.GetTextExtent("test string")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)