wxPython中TextCtrl解决字体不等宽问题

这里主要是记录一下自己使用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()

运行后如下,
wxPython中TextCtrl解决字体不等宽问题_第1张图片
我们输入一些字符就可以看出来了,
在这里插入图片描述
可以看到第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默认字体

问题解决了,那就回头看下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下就用的微软雅黑。

你可能感兴趣的:(Python)