我有一个正在 wxPython 中开发的应用程序。应用程序的一部分在网格中创建了大量的 TextCtrl,以便为任意大的人员列表输入一周中的每一天的四个字母代码。
我设法让它工作,但我不得不做一些笨拙的事情。具体来说,我还没有找到一个很好的方法来确定一段文本有多大(以像素为单位),所以我必须猜测 TextCtrls 的大小以适合最大的(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 的客户区域中添加一个小边框;这是另一件我宁愿不直接做的事情。)