pywin32: EnumFontFamilies ломает питона - PullRequest
0 голосов
/ 23 апреля 2011

Для остроумия:

import win32gui
def enum_fonts(typeface=None):
    hwnd = win32gui.GetDesktopWindow()
    dc = win32gui.GetWindowDC(hwnd)

    res = []
    def callback(*args):
        res.append(args)
    win32gui.EnumFontFamilies(dc, typeface, callback)

    win32gui.ReleaseDC(hwnd, dc)
    return res

res = enum_fonts()
for r in res:
    print r[0].lfFaceName

Что следует за причудливой аберрацией:

System
Terminal
Fixedsys
Roman
Script
Modern
Small Fonts
MS Serif
WST_Czec
WST_Engl
WST_Fren
WST_Germ
WST_Ital
WST_Span
WST_Swed
Courier
MS Sans Serif
Marlett
Arial
...
Waker
TT Anvers Black
TT Anvers
wodSymbols
Traceback (most recent call last):
  File "test.py", line 48, in <module>
    for r in res:
TypeError: an integer is required

Он сломал питона!

Я делаю неверное предположение о способе вызова функции? Это известная ошибка в pywin32? Есть ли другой способ перечисления семейств шрифтов из python?

1 Ответ

1 голос
/ 23 апреля 2011

Ах, я пристрелюсь. Обратный вызов должен возвращать целое число - 0, чтобы прекратить итерацию, ненулевое значение, чтобы продолжить. Это отлично работает:

def enum_fonts(typeface=None):
    hwnd = win32gui.GetDesktopWindow()
    dc = win32gui.GetWindowDC(hwnd)

    res = []
    def callback(*args):
        res.append(args)
        return 1
    win32gui.EnumFontFamilies(dc, typeface, callback)

    win32gui.ReleaseDC(hwnd, dc)
    return res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...