实战wxPython:020 – 字体选择对话框FontDialog

  • Post author:
  • Post category:python


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全局方法。

前一篇:

实战wxPython:019 – 颜色选择对话框ColourDialog



版权声明:本文为seniorwizard原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。