windows - pywin32: EnumFontFamilies bryder python

Indlæg af Hanne Mølgaard Plasc

Problem



Til:


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


Det følgende er en bizar aberration:


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


Det brød python!


Giver jeg en forkert antagelse med den måde, jeg kalder funktionen på? Er dette en kendt fejl i pywin32? Er der nogen anden måde at opregne fontfamilier fra python?

Bedste reference


Åh, jeg vil skyde mig selv. Tilbagekaldelsen skal returnere et helt tal - 0 for at stoppe iterering, ikke-nul for at fortsætte. Dette virker fint:


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