If you have a GtkFontButton, finding out whether the chosen font is monospaced is quite a complicated process. Here is a complete walk-through.
(By the way, I will be using PyGTK’s Pango documentation because the C version is a mess.)
FontButton.get_font_name returns the font family (a.k.a. “font name”), style, and size; for example, “Liberation Serif Italic 14”. The first thing we need to do is pick just the family name. We do this by going through a PangoFontDescription.
desc_str = font_button.get_font_name() # Liberation Serif Italic 14 desc = pango.FontDescription(desc_str) family_name = desc.get_family() # Liberation Serif
Next, check whether the font family describes a monospaced font. Here is where it gets dodgy. We need an arbitrary PangoContext, which can be obtained from a GtkWidget using
Widget.get_pango_context. We then list all available font families and find the one with the appropriate name. Call
FontFamily.is_monospace to finish the job.
(By the way, this is also a good place to show off Python’s for-else construct.)
context = widget.get_pango_context() # widget can be any GtkWidget. for family in context.list_families(): if family.get_name() == family_name: break else: # Should not happen. assert False family.is_monospace() # False -- Liberation Serif is proportional.