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

标签 python wxpython size wxtextctrl

我有一个正在用 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")

关于python - wxPython中查找文本大小的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269880/

相关文章:

python - wxPython - DropSource.SetData() 适用于字符串,但不适用于列表

css - 响应问题

PHPExcel自动调整列宽

python - shell multipipe 被多个 python 脚本破坏

python - 写入 CSV,为空字符串获取 "Error: need to escape"

python - 有没有办法在python中使用字典来打印2个输出: one as string of whole token and one as number

macos - 尽管更改了安全设置并使用命令行安装,但在 OSX10.11 上安装 wxpython 失败

python - Cython:从引用中获取时,Numpy 数组缺少两个第一个元素

python - wx.StaticBitmap 或 wx.DC : Which is better to use for constantly changing images?

ipad - ipad应用程序有大小限制吗?