Fonts wxPython-是否可能覆盖系统默认字体?
我正在为我的GUI使用wxPython。在使用“Segoe UI”作为默认字体的windows PC上,一切看起来都很好。我的一个同事在中国工作,有一个不同的系统默认字体。我不知道它叫什么名字,但它在我的GUI中弄乱了空格。 我试图修复其中的大部分,但ListCtrls等也使用中文字体 因此,我搜索一种方法来覆盖wx应用程序使用的默认字体,以防止我更改每个小部件的默认字体 我试图这样覆盖它:Fonts wxPython-是否可能覆盖系统默认字体?,fonts,wxpython,Fonts,Wxpython,我正在为我的GUI使用wxPython。在使用“Segoe UI”作为默认字体的windows PC上,一切看起来都很好。我的一个同事在中国工作,有一个不同的系统默认字体。我不知道它叫什么名字,但它在我的GUI中弄乱了空格。 我试图修复其中的大部分,但ListCtrls等也使用中文字体 因此,我搜索一种方法来覆盖wx应用程序使用的默认字体,以防止我更改每个小部件的默认字体 我试图这样覆盖它: self.SetFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, w
self.SetFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False,'Segoe UI'))
import wx
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "", size=(600,300))
fnt = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
wx.SystemSettings.
print(fnt.GetFaceName())
app = wx.App()
frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()
但这主要是针对面板,而不是ListCtrls
我可以得到如下默认字体:
self.SetFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False,'Segoe UI'))
import wx
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "", size=(600,300))
fnt = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
wx.SystemSettings.
print(fnt.GetFaceName())
app = wx.App()
frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()
但我不能以任何方式改变它 更改面板的字体应该可以。是否确定listCtrl是面板的子项?更改面板的字体应该可以。是否确定listCtrl是面板的子级?使用以下内容定义字体:
self.font=wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, "Arial")
您可以为不同的场合设置不同的字体。例如,当你想把它变大或加粗等
然后,您可以在所有小部件上设置字体:
self.NameOfDatabase=wx.StaticText(self.somepanel,-1)
self.NameOfDatabase.SetLabel('Sometext')
self.NameOfDatabase.SetFont(self.font)
要更改listctrl小部件中的字体,必须更改每个项目中的字体。与
SetItemFont(self, item, font)
使用以下内容定义字体:
self.font=wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, "Arial")
您可以为不同的场合设置不同的字体。例如,当你想把它变大或加粗等
然后,您可以在所有小部件上设置字体:
self.NameOfDatabase=wx.StaticText(self.somepanel,-1)
self.NameOfDatabase.SetLabel('Sometext')
self.NameOfDatabase.SetFont(self.font)
要更改listctrl小部件中的字体,必须更改每个项目中的字体。与
SetItemFont(self, item, font)
虽然它可能不是最优的,但您可以单独设置/all
ListCtrl
的字体,只需使用一个简单的SetFont
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Font")
panel = wx.Panel(self, wx.ID_ANY)
font = wx.Font(18, wx.MODERN, wx.ITALIC, wx.NORMAL, faceName='Linux Libertine')
self.index = 0
self.text = "Timbuktoo"
self.list_ctrl = wx.ListCtrl(panel, size=(750,350),
style=wx.LC_REPORT
|wx.BORDER_SUNKEN
)
#panel.SetFont(font)
self.list_ctrl.SetFont(font)
self.list_ctrl.InsertColumn(0, 'Subject', width=100)
self.list_ctrl.InsertColumn(1, 'Due', width=150)
self.list_ctrl.InsertColumn(2, 'Location', width=300)
btn = wx.Button(panel, label="Add Line")
btn.Bind(wx.EVT_BUTTON, self.add_line)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(sizer)
def add_line(self, event):
line = "Line %s" % self.index
self.list_ctrl.InsertItem(self.index, line)
self.list_ctrl.SetItem(self.index, 1, "22/05/2020")
self.list_ctrl.SetItem(self.index, 2, self.text)
self.index += 1
self.text = self.text+"1"
if __name__ == "__main__":
app = wx.App()
frame = MyForm()
frame.Show()
app.MainLoop()
虽然它可能不是最优的,但您可以单独设置/all
ListCtrl
的字体,只需使用一个简单的SetFont
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Font")
panel = wx.Panel(self, wx.ID_ANY)
font = wx.Font(18, wx.MODERN, wx.ITALIC, wx.NORMAL, faceName='Linux Libertine')
self.index = 0
self.text = "Timbuktoo"
self.list_ctrl = wx.ListCtrl(panel, size=(750,350),
style=wx.LC_REPORT
|wx.BORDER_SUNKEN
)
#panel.SetFont(font)
self.list_ctrl.SetFont(font)
self.list_ctrl.InsertColumn(0, 'Subject', width=100)
self.list_ctrl.InsertColumn(1, 'Due', width=150)
self.list_ctrl.InsertColumn(2, 'Location', width=300)
btn = wx.Button(panel, label="Add Line")
btn.Bind(wx.EVT_BUTTON, self.add_line)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(sizer)
def add_line(self, event):
line = "Line %s" % self.index
self.list_ctrl.InsertItem(self.index, line)
self.list_ctrl.SetItem(self.index, 1, "22/05/2020")
self.list_ctrl.SetItem(self.index, 2, self.text)
self.index += 1
self.text = self.text+"1"
if __name__ == "__main__":
app = wx.App()
frame = MyForm()
frame.Show()
app.MainLoop()