Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug report: AttributeError: type object 'QFont' has no attribute 'Decorative' #1249

Open
opoplawski opened this issue Jun 12, 2023 · 3 comments

Comments

@opoplawski
Copy link
Contributor

Environment

OS: Linux
Python version: 3.11
Toolkit: Qt
Qt API: PyQt6

pyface/traitsui 8.0.0

Description

When running the traitsui pyqt6 tests I get:

ERROR: test_create_traitsfont_pyface_font (traitsui.qt.tests.test_font_trait.TestPyQtFont.test_create_traitsfont_pyface_font)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILDROOT/python-traitsui-8.0.0-1.fc39.x86_64/usr/lib/python3.11/site-packages/traitsui/qt/tests/test_font_trait.py", line 89, in test_create_traitsfont_pyface_font
    traits_font = create_traitsfont(font)
                  ^^^^^^^^^^^^^^^^^^^^^^^
  File "/builddir/build/BUILDROOT/python-traitsui-8.0.0-1.fc39.x86_64/usr/lib/python3.11/site-packages/traitsui/qt/font_trait.py", line 94, in create_traitsfont
    return TraitsFont(value.to_toolkit())
                      ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pyface/font.py", line 378, in to_toolkit
    font_to_toolkit_font = toolkit_object('font:font_to_toolkit_font')
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pyface/base_toolkit.py", line 127, in __call__
    module = import_module(mname, package)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3.11/site-packages/pyface/ui/qt/font.py", line 25, in <module>
    QFont.Decorative: 'fantasy',
    ^^^^^^^^^^^^^^^^
AttributeError: type object 'QFont' has no attribute 'Decorative'

With PyQt6 this is now QFont.StyleHint.Decorative. I don't know how pyface is supposed to handle this difference.

@corranwebster
Copy link
Contributor

Thanks for the report - due to issues like this PyQt6 is not yet supported.

I think a simple PR to change it to QFont.StyleHint.Decorative would be backward compatible. But it is likely there would be multiple other similar changes. This update process is very hard to automate.

@opoplawski
Copy link
Contributor Author

I tried changing it to QFont.StyleHint.Decorative but that seemed to break the Qt5 tests.

@johannesloibl
Copy link
Contributor

A similar problem related to this is:

C:\Users\...\Lib\site-packages\pyface\ui\qt\code_editor\code_widget.py:57: in __init__
    font.setStyleHint(QtGui.QFont.TypeWriter)
E   AttributeError: type object 'QFont' has no attribute 'TypeWriter'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants