在wxPython中查找文本大小的正确方法



我有一个应用程序,我正在开发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。字体实例,包含脸型、大小等;创建一个wx.DC;那就打给dc。getextextent("一个文本字符串")获取显示该字符串所需的宽度和高度。在网格中相应地设置行高和列宽。

类似:

font = wx.Font(...)
dc = wx.DC()
dc.SetFont(font)
w,h = dc.GetTextExtent("test string")

不是要否定Paul McNett的答案,但是对于那些不熟悉wxPython的人来说,这里有一个简单完整的示例:

import wx
app = wx.PySimpleApp()
font = wx.Font(pointSize = 10, family = wx.DEFAULT,
               style = wx.NORMAL, weight = wx.NORMAL,
               faceName = 'Consolas')
dc = wx.ScreenDC()
dc.SetFont(font)
text = 'text to test'
# (width, height) in pixels
print '%r: %s' % (text, dc.GetTextExtent(text))

输出:'text to test': (84, 15)

相关内容

  • 没有找到相关文章

最新更新