3

我正在为一家公司开发一个应用程序,该公司试图用一种特定的字体为自己打上品牌。他们为我提供了其他产品使用的字体的所有 .otf 文件。是否可以在按钮和静态文本等小部件上设置字体以使用这些外部文件?如果是这样,它会独立于平台吗?

谢谢

4

2 回答 2

2

还没有,但可能很快就会实现。我最近在 wxWidgets Trac 中看到了一个补丁和关于它的讨论。

于 2013-07-24T03:40:58.180 回答
0

我自己对此很感兴趣,并拼凑了一些东西来尝试一下。我查看了http://wiki.wxpython.org/UsingFonts并尝试了 wx.TheFontList.FindOrCreateFont 方法来尝试将字体加载到 wxpython 中。这失败了,因为 AddFontResourceA 调用返回 0,这是一个失败代码;它没有提供进一步的信息。感谢微软!!

如果将字体安装到系统(假设是 Windows),则字体选择有效。

我在 wxpython 2.8、Windows 7 64bit 和Proggy 字体上试过这个

from ctypes import *
import os

gdi32= WinDLL("gdi32.dll")
font_path = os.path.abspath("ProggySquare.tff")
print font_path
print gdi32.AddFontResourceA(font_path)

import wx
class DrawPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

    def OnPaint(self, event=None):
        face = "ProggySquareTT"
        prog_font = wx.TheFontList.FindOrCreateFont(28, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, face)
        def_font = wx.Font(12, wx.MODERN, wx.NORMAL, wx.NORMAL)
        dc = wx.PaintDC(self)
        dc.Clear()
        dc.SetFont(prog_font)
        dc.DrawText("Modern font Family", 50, 50)

app = wx.App(0)
frame = wx.Frame(None, title="Font Family")
DrawPanel(frame)
frame.Show()

#data = wx.FontData()
#data.EnableEffects(True)      
#dlg = wx.FontDialog(None, data)
#if dlg.ShowModal() == wx.ID_OK:          
#    data = dlg.GetFontData()
#    font = data.GetChosenFont() 

#e = wx.FontEnumerator()
#e.EnumerateFacenames()
#elist= e.GetFacenames()
#elist.sort()
#print elist
app.MainLoop()
于 2013-07-24T02:36:37.710 回答