Windows 7, wxpython, неизвестный вес шрифта - PullRequest
1 голос
/ 25 марта 2012

Я новичок в этом:

Мое приложение отлично работает в Linux, где я его разработал. Я пытаюсь перенести его на win7, прежде чем сделать его exe (школьный психолог хочет использовать его на своем компьютере) Одной из функций приложения является изменение размера шрифта в ответ на событие (в этом случае пользователь нажимает кнопку).

Вот код:

if countfinal == 1:
        on_start = time.time()
        ot.append(on_start) 
        self.welcome.SetLabel("Timing On Task Event") 
        self.label_directions.SetLabel("Timing On Task Event")
        self.SetBackgroundColour(wx.GREEN)  
        on.append(1)
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.DEFAULT, wx.FONTENCODING_SYSTEM) 
        self.label_directions.SetFont(font)  
        self.save_quit.Enable(False)

Windows 7 выдает эту ошибку:

Traceback (most recent call last):
File "time.py", line 131, in time_event
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.DEFAULT, wx.FONTENCODING_SYSTEM)
File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", line 2081,           in       __init__
_gdi_.Font_swiginit(self,_gdi_.new_Font(*args, **kwargs))
wx._core.PyAssertionError: C++ assertion "wxAssertFailure" failed at ..\..\src     \msw\font.cpp(560) in wxNativeFontInfo::Se
tWeight(): unknown font weight

Я читал, что это как-то связано с Windows, не использующей UTF-8. Это хорошо, но это не помогает мне.

Как мне указать wx использовать кодировку шрифтов, которую распознает Windows 7? Может ли кто-то быть так любезен, чтобы предоставить мне пример кода, который делает это? Документация немного загадочна для меня; Я все еще на этой стадии борьбы с неофитом с этим.

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Хорошо, я понял, где моя ошибка была в этом. Я делал две вещи неправильно:

  1. Я неправильно прочитал код ошибки. Код ошибки называется «вес», а не «размер». Вся вещь UTF-8 действительно была кроличьей норой в никуда

  2. Я складывал вещи в неправильном порядке. Учебное пособие Майка Дрисколла проясняет этот пример:

    font = wx.Font (размер, семейства [семейство], стили [стиль], вес [вес])

что wx требователен к порядку атрибутов. Идет размер, семья, стиль, вес. У меня были они не в порядке. Я думаю, что я также использовал неправильные атрибуты wx. Кажется, что некоторые учебники будут включать wx.DEFAULT, а не wx.FONTFAMILY_DEFAULT. Это очень запутанно для нового программиста. Неужели так сложно просто написать первую часть тега? Особенно в учебнике?

Вот код, который работает:

if countfinal == 1

        size = 18 
        font = wx.Font(size, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) 
        self.label_directions.SetFont(font)  

Отдельное спасибо Майку Дрисколлу за публикацию ответа и за написание этого урока!

Ура!

0 голосов
/ 26 марта 2012

Я написал статью о шрифтах в моем блоге .Я просто попробовал код и добавил шрифт 18 pt в список размеров, и он работал нормально.Может быть, вы могли бы попробовать его на своем компьютере и посмотреть, работает ли он там тоже?Если это так, то вы захотите увидеть, где ваш код отличается от моего.

...