wx.FontDialog提供一个可以进行字体选择的对话框,它继承自wx.Dialog,是wxPython内建的通用对话框。它可以让用户选择所显示的文本的字体类型, 字号大小、样式,格式以及字体的颜色等。通过wx.FontDialog对话框可以通过GUI界面交互方式对文本的外观显示进行精细的调整。
一、wx.FontDialog简介
字体选择对话框类wx.FontDialog提供了对字体各种外观属性的选择,包括:
- 字体: 选择文本的字体;
- 字形: 包括常规, 斜体,粗体,粗斜体几种选择;
- 大小: 字的大小设置;
- 效果: 包括删除线和下划线两种效果;
- 颜色: 选择字体要设置的颜色。
wx.FontDialog常用方法有:
- GetFontData(self): 返回与字体选择对话框相关的数据(wx.FontData),该数据包含了字体属性数据和字体颜色数据等。
- ShowModal(self): 显示对话框,如果点击了wx.OK按钮则返回wx.ID_OK,否则返回wx.ID_CANCEL。
图1:wx.FontDialog类继承关系
二、wx.FontData
wx.FontData保存wx.FontDialog的各种信息,它的常用方法有:
- GetChosenFont(self): 获取用户点击wx.OK(wx.FontDialog.ShowModal返回wx.ID_OK)后所选择的字体信息。
- GetColour(self): 获取在字体选择对话框中选择的颜色值,缺省值为黑色。
- GetEnableEffects(self): 获取是否启用或禁用“效果”选项设置,缺省值为启用。
- GetInitialFont(self): 获取字体选择对话框设置的初始字体。
- EnableEffects (self, enable): 启用或禁用“效果”选项,仅在Windows或者通用情况下有效。
- SetAllowSymbols(self, allowSymbols): 在Windows下,确定是否可以选择符号字体。在其他平台该设置无效,其缺省值为True。
- SetChosenFont (self, font): 设置将返回给用户的字体(仅供内部使用)。
- SetColour (self, colour): 设置将用于字体前景色的颜色,缺省值为黑色。
- SetInitialFont (self, font): 设置字体对话框最初使用的字体。
- SetRange (self, min, max): 设置字体大小的有效范围(仅限Windows)。
三、wx.FontDialog示例
以下的代码演示如何使用wx.FontDialog。
#字体选择对话框(FontDialog)
import wx
class SampleFontDialog(wx.Frame):
def __init__(self, *args, **kw):
super(SampleFontDialog, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: 字体选择对话框")
#设置窗口尺寸
self.SetSize(480, 360)
vSizer = wx.BoxSizer(wx.VERTICAL)
btnTest = wx.Button(self, -1, "调整字体")
btnTest.Bind(wx.EVT_BUTTON, self.OnSetFont)
self.label_text = wx.StaticText(self, -1, style=wx.TE_MULTILINE, size = (-1, 300))
self.label_text.SetLabel("实战wxPython: \n测试wx.FontDialog")
self.label_text.SetFont(wx.Font(wx.FontInfo(20)))
vSizer.Add(btnTest, wx.ID_ANY, wx.EXPAND|wx.ALIGN_TOP)
vSizer.Add(self.label_text, wx.ID_ANY, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 40)
self.SetSizer(vSizer)
self.Centre()
def OnSetFont(self, e):
dlg = wx.FontDialog(self)
if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetFontData()
new_font = data.GetChosenFont()
new_color = data.GetColour().Get()
self.label_text.SetFont(new_font)
self.label_text.SetForegroundColour(new_color)
dlg.Destroy()
def main():
app = wx.App()
sample = SampleFontDialog(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
运行上面的代码,在Windows系统下,其界面如图2:
图2:wx.FontDialog对话框演示
当我们点击”调整字体”按钮后, 将弹出字体选择对话框,如图3所示:
图3:字体选择对话框
在字体对话框上,选择我们需要设置的字体信息,如图3,我们选择字体为”Consolas”,字形为”粗斜体”,大小为”24”,效果为”下划线”, 颜色为”青色”。点击确定按钮,退出字体选择对话框,回到主窗口,最终效果如图4:
图4:字体调整效果演示
可以看到,通过获得字体选择对话框选择的字体信息,我们改变了演示字体的外观。
当我们点击字体选择对话框的”确定”按钮后,wx.FontDialog对话框的ShowModal方法返回wx.ID_OK,执行下面的语句:
data = dlg.GetFontData()
获取字体信息数据
new_font = data.GetChosenFont()
获取所选择的字体
new_color = data.GetColour().Get()
获取字体的前景色
self.label_text.SetFont(new_font)
设置新的字体
self.label_text.SetForegroundColour(new_color)
设置新的字体颜色
四、wx.GetFontFromUser
调用wx.GetFontFromUser全局方法,可以弹出一个字体选择对话框,该方法的函数原型为:
wx.GetFontFromUser(parent, fontInit,caption)
参数:
parent
:父窗口
fontInit
:初始字体
caption
:窗口标题, 默认EmptyString
调用方法:
font = wx.GetFontFromUser(self, wx.NullFont)
上述代码将弹出一个字体选择对话框,当关闭对话框时,将返回一个wx.Font类型的数据值。
五、本文知识点
- 了解颜色选择对话框wx.FontDialog。
- 了解wx.FontData。
- 使用字体选择对话框修改文字的字体。
- 调用wx.GetFontFromUser全局方法。