Fonts wxPython-是否可能覆盖系统默认字体?

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

我正在为我的GUI使用wxPython。在使用“Segoe UI”作为默认字体的windows PC上,一切看起来都很好。我的一个同事在中国工作,有一个不同的系统默认字体。我不知道它叫什么名字,但它在我的GUI中弄乱了空格。 我试图修复其中的大部分,但ListCtrls等也使用中文字体

因此,我搜索一种方法来覆盖wx应用程序使用的默认字体,以防止我更改每个小部件的默认字体

我试图这样覆盖它:

    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()