这里主要是记录一下自己使用TextCtrl时遇到的字体不等宽问题及解决办法。
wxPython中TextCtrl默认使用的字体在Win10下不是等宽的,下面使用代码演示一下,
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "GUI", size=(300, 300))
panel = wx.Panel(frame, wx.ID_ANY)
textCtrl = wx.TextCtrl(panel, wx.ID_ANY, pos=(50, 20), size=(200, 200), style=wx.TE_MULTILINE)
if __name__ == '__main__':
frame.Show(True)
app.MainLoop()
运行后如下,
我们输入一些字符就可以看出来了,
可以看到第2行最后一个2是在第三行结尾的E和G之间,不和任何一个对齐,看起来就会有点别扭。
很简单,把TextCtrl字体设置为等宽的就可以了,
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "GUI", size=(300, 300))
panel = wx.Panel(frame, wx.ID_ANY)
font = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL, False, 'Consolas')
textCtrl = wx.TextCtrl(panel, wx.ID_ANY, pos=(50, 20), size=(200, 200), style=wx.TE_MULTILINE)
textCtrl.SetFont(font)
if __name__ == '__main__':
frame.Show(True)
app.MainLoop()
问题解决了,那就回头看下TextCtrl的默认字体是什么。使用以下代码,
import wx
app = wx.App()
frame = wx.Frame(None, wx.ID_ANY, "GUI", size=(300, 300))
panel = wx.Panel(frame, wx.ID_ANY)
textCtrl = wx.TextCtrl(panel, wx.ID_ANY, pos=(50, 20), size=(200, 200), style=wx.TE_MULTILINE)
defaultFont = textCtrl.GetFont()
print(defaultFont.GetFaceName(), " ", defaultFont.IsFixedWidth())
打印如下,
默认使用的是微软雅黑,不是等宽字体。wxPython默认字体选的就是系统默认字体,所以在win10下就用的微软雅黑。