-1

谁能伸出援助之手。

我正在用 Python 中的 BoaConstructor 构建一个应用程序,它使用 wx.STC.StyledTextCtrl。在这个 styledtextctrl 中,我通过 Scapy 的 hexdump 函数输出十六进制数据。它添加了行号、十六进制转储和字符转码。不幸的是,我无法弄清楚如何在 StyledTextCtrl 中设置此文本的格式,以便它像常规的十六进制编辑器一样显示(请参见此处的图片http://imgur.com/a/tqE02)。谢谢!

4

1 回答 1

0

既然你说输出在其他编辑器中看起来不错,我猜问题是字体使用可变像素宽度的字符(例如,如果像“w”这样的宽字符是 15 像素宽,那么像“i”这样的更细的字符可能只有 10 个像素)。在固定宽度字体(有时称为单宽字体或打字机文本字体)中,所有字符的宽度完全相同。

您可以在屏幕截图中看到这方面的证据;在“.(.”部分之前的第二行有一个轻微的额外缩进。看起来空格字符比数字要细得多,所以所有这些缺失的像素都使底行的第三个“列”显得太远了左(而第二行的额外宽度将其略微向右推)

您需要找到一种字体,以便IsFixedWidth()返回True,然后设置您的 STC 以使用该字体。通常,您会使用SetFont()方法进行设置,但我碰巧知道 STC 更喜欢使用自己的方法。我发现这个StyleSetFont()方法是特定于 STC 的,所以这可能是一个更好的选择。

至于选择你的字体,这里有一个关于字体如何在 wxpython 中工作的很好的教程。作者实际上是这里的活跃成员。特别是,在该文章中搜索他的“wx.FontEnumerator 小部件”示例。它应该允许您找到固定宽度的字体并查看它们以查看您是否喜欢它们。对于一个快速而简单的解决方案,这个论坛帖子讨论了wx.TELETYPE保证固定宽度的标志,这些代码示例应该让您了解如何使用它。

祝你好运!

----编辑----
我对 STC 不是很熟悉,但我记得我之前回答过一个涉及 STC 的问题,您可能需要StyleClearAll()在设置字体后调用该问题。有关为什么需要这样做的更多信息,请参阅该答案的编辑部分。

于 2012-08-07T17:22:07.083 回答