wxPython StyledTextCtrl十六进制格式

时间:2012-08-06 19:30:13

标签: python wxpython scapy wxstyledtextctrl boa-constructor

任何人都可以伸出援助之手。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

至于选择字体,here是关于字体在wxpython中如何工作的好教程。作者实际上是这里的活跃成员。特别是,搜索该文章的“wx.FontEnumerator小部件”示例。它应该允许您找到固定宽度的字体并查看它们以查看您是否喜欢它们。对于快速而肮脏的解决方案,this forum post讨论了保证固定宽度的wx.TELETYPE标志,these code samples应该让您知道如何使用它。

祝你好运!

---- ---- EDIT
我对STC不是很熟悉,但我记得a previous answer我提到了一个涉及STC的问题,你可能需要在设置字体后调用StyleClearAll()。有关可能需要这样做的详细信息,请参阅该答案的EDIT部分。