将wxPython小部件的字体设置为外部字体文件

3
我正在为一家试图打造特定字体品牌的公司开发应用程序。他们已经提供了其它产品所使用的所有.otf字体文件给我。是否可以将小部件(如按钮和静态文本)上的字体设置为使用这些外部文件?如果可以,这是否是跨平台的?
谢谢。
2个回答

2

目前还不行,但很快可能会有这个功能。我最近在wxWidgets Trac上看到了一个关于此的补丁和讨论。


1
@DevC 我相信Robin在谈论#13568,这个问题已经七个月没有更新了 :-( - bdesham

0

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

如果您将字体安装到系统中(假设是Windows),则字体选择将起作用。

我在wxpython 2.8、Windows 7 64位和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()

OTF文件与TTF文件不同,尽管它们有时可以互换使用... - Mike Driscoll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接