2013-07-23 72 views
3

我正在爲嘗試用特定字體標記自己的公司開發應用程序。他們已經爲我提供了其他產品使用的字體的所有.otf文件。是否可以在小部件(如按鈕和靜態文本)上設置字體以使用這些外部文件? 如果是這樣,它會是平臺無關的嗎?將wxPython小部件字體設置爲外部字體文件

感謝

回答

0

我很感興趣,在這個自己,kluged東西一起嘗試一下。我看着http://wiki.wxpython.org/UsingFonts並嘗試使用wx.TheFontList.FindOrCreateFont方法嘗試將字體加載到wxpython中。這失敗了,因爲AddFontResourceA調用返回0,這是一個failure code;它沒有提供進一步的信息。感謝MICROSOFT!

如果將字體安裝到系統中(假設爲Windows),則字體選擇將起作用。

我想這對wxPython的2.8,64位Windows 7,並與Proggy fonts

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

otf文件與ttf不一樣,雖然它們有時可以互換使用... –

1

還沒有,但它可能會很快可能。我最近在wxWidgets Trac中看到了一個補丁和討論。

+0

它的任何更新,現在有可能嗎? – DevC

+1

@DevC我相信羅賓正在談論[#13568](http://trac.wxwidgets.org/ticket/13568),它現在還沒有更新七個月:-( – bdesham