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

Integration with pyqt does not work with new versions of Pyglet #1101

Open
Derfies opened this issue May 5, 2024 · 3 comments
Open

Integration with pyqt does not work with new versions of Pyglet #1101

Derfies opened this issue May 5, 2024 · 3 comments
Labels
bug Something isn't working

Comments

@Derfies
Copy link

Derfies commented May 5, 2024

Keen to integrate a pyqt-based gui with my project, I followed the sample code in the top answer here:

https://stackoverflow.com/questions/72714242/render-pyglet-window-inside-pyqt6-window

With the current version of pyglet (2.0.15), running this script from pycharm exits immediately with error code -1073740791. This kind of non-verbose crashing is typical of pyqt6 and switching to pyside usually gives more verbose output. So after switching out pyqt6 to pyside6 we get a little more progress - a window appears however we get an error appearing in the console:

Exception ignored on calling ctypes callback function: <function Win32Window._get_window_proc.<locals>.f at 0x0000020B7E14DC60>
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\window\win32\__init__.py", line 741, in f
    event_handler = event_handlers.get(msg, None)
SystemError: <method 'get' of 'dict' objects> returned a result with an exception set

what's more pressing 'create rectangle' spews this message into the console:

Traceback (most recent call last):
  File "C:\Users\user\Documents\git\qtextras\examples\pyglet_example.py", line 89, in paintGL
    self.batch.draw()
  File "C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\graphics\__init__.py", line 409, in draw
    func()
  File "C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\graphics\__init__.py", line 338, in <lambda>
    draw_list.append((lambda d, m: lambda: d.draw(m))(domain, mode))
  File "C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\graphics\vertexdomain.py", line 177, in draw
    self.vao.bind()
  File "C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\graphics\vertexarray.py", line 23, in bind
    glBindVertexArray(self._id)
  File "C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\gl\lib.py", line 78, in errcheck
    raise GLException(f'(0x{error}): {msg}')
pyglet.gl.lib.GLException: (0x1282): Invalid operation. The specified operation is not allowed in the current state.

Downgrading pyglet to v1.5.17 (the version available at the time the sample code was produced) appears to fix the issue - the app starts normally without the dict error and pushing the 'add rectangle' button adds a rectangle to the scene and can be viewed.

pyglet.info for working:

Platform
------------------------------------------------------------------------------
platform:  Windows-10-10.0.22631-SP0
release:   10
machine:   AMD64

Python
------------------------------------------------------------------------------
implementation: CPython
sys.version: 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
sys.maxint: 9223372036854775807
os.getcwd(): C:\Users\user\Documents\git\qtextras\examples

pyglet
------------------------------------------------------------------------------
pyglet.version: 1.5.17
pyglet.compat_platform: win32
pyglet.__file__: C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\__init__.py
pyglet.options['audio'] = ('xaudio2', 'directsound', 'openal', 'pulse', 'silent')
pyglet.options['debug_font'] = False
pyglet.options['debug_gl'] = True
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_gl_trace_args'] = False
pyglet.options['debug_graphics_batch'] = False
pyglet.options['debug_lib'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_texture'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_trace_args'] = False
pyglet.options['debug_trace_depth'] = 1
pyglet.options['debug_trace_flush'] = True
pyglet.options['debug_win32'] = False
pyglet.options['debug_x11'] = False
pyglet.options['graphics_vbo'] = True
pyglet.options['shadow_window'] = True
pyglet.options['vsync'] = None
pyglet.options['xsync'] = True
pyglet.options['xlib_fullscreen_override_redirect'] = False
pyglet.options['darwin_cocoa'] = True
pyglet.options['search_local_libs'] = True
pyglet.options['advanced_font_features'] = False
pyglet.options['headless'] = False
pyglet.options['headless_device'] = 0

pyglet.window
------------------------------------------------------------------------------
display: <pyglet.canvas.win32.Win32Display object at 0x00000236590E9870>
screens[0]: Win32Screen(x=0, y=0, width=1366, height=768)
screens[1]: Win32Screen(x=-2469, y=-2160, width=2560, height=1440)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 32
config['aux_buffers'] = 0
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 10
config['green_size'] = 10
config['blue_size'] = 10
config['alpha_size'] = 2
config['depth_size'] = 24
config['stencil_size'] = 8
config['accum_red_size'] = 0
config['accum_green_size'] = 0
config['accum_blue_size'] = 0
config['accum_alpha_size'] = 0
config['major_version'] = None
config['minor_version'] = None
config['forward_compatible'] = None
config['debug'] = None
context: Win32Context()

window.context._info
------------------------------------------------------------------------------
gl_info.get_version(): 4.6.0 - Build 31.0.101.4032
gl_info.get_vendor(): Intel
gl_info.get_renderer(): Intel(R) Iris(R) Xe Graphics
gl_info.get_extensions():
   GL_3DFX_texture_compression_FXT1
   GL_AMD_depth_clamp_separate
   GL_AMD_vertex_shader_layer
   GL_AMD_vertex_shader_viewport_index
   GL_ARB_ES2_compatibility
   GL_ARB_ES3_1_compatibility
   GL_ARB_ES3_compatibility
   GL_ARB_arrays_of_arrays
   GL_ARB_base_instance
   GL_ARB_bindless_texture
   GL_ARB_blend_func_extended
   GL_ARB_buffer_storage
   GL_ARB_cl_event
   GL_ARB_clear_buffer_object
   GL_ARB_clear_texture
   GL_ARB_clip_control
   GL_ARB_color_buffer_float
   GL_ARB_compatibility
   GL_ARB_compressed_texture_pixel_storage
   GL_ARB_compute_shader
   GL_ARB_conditional_render_inverted
   GL_ARB_conservative_depth
   GL_ARB_copy_buffer
   GL_ARB_copy_image
   GL_ARB_cull_distance
   GL_ARB_debug_output
   GL_ARB_depth_buffer_float
   GL_ARB_depth_clamp
   GL_ARB_depth_texture
   GL_ARB_derivative_control
   GL_ARB_direct_state_access
   GL_ARB_draw_buffers
   GL_ARB_draw_buffers_blend
   GL_ARB_draw_elements_base_vertex
   GL_ARB_draw_indirect
   GL_ARB_draw_instanced
   GL_ARB_enhanced_layouts
   GL_ARB_explicit_attrib_location
   GL_ARB_explicit_uniform_location
   GL_ARB_fragment_coord_conventions
   GL_ARB_fragment_layer_viewport
   GL_ARB_fragment_program
   GL_ARB_fragment_program_shadow
   GL_ARB_fragment_shader
   GL_ARB_fragment_shader_interlock
   GL_ARB_framebuffer_no_attachments
   GL_ARB_framebuffer_object
   GL_ARB_framebuffer_sRGB
   GL_ARB_geometry_shader4
   GL_ARB_get_program_binary
   GL_ARB_get_texture_sub_image
   GL_ARB_gl_spirv
   GL_ARB_gpu_shader5
   GL_ARB_gpu_shader_fp64
   GL_ARB_half_float_pixel
   GL_ARB_half_float_vertex
   GL_ARB_indirect_parameters
   GL_ARB_instanced_arrays
   GL_ARB_internalformat_query
   GL_ARB_internalformat_query2
   GL_ARB_invalidate_subdata
   GL_ARB_map_buffer_alignment
   GL_ARB_map_buffer_range
   GL_ARB_multi_bind
   GL_ARB_multi_draw_indirect
   GL_ARB_multisample
   GL_ARB_multitexture
   GL_ARB_occlusion_query
   GL_ARB_occlusion_query2
   GL_ARB_pipeline_statistics_query
   GL_ARB_pixel_buffer_object
   GL_ARB_point_parameters
   GL_ARB_point_sprite
   GL_ARB_polygon_offset_clamp
   GL_ARB_post_depth_coverage
   GL_ARB_program_interface_query
   GL_ARB_provoking_vertex
   GL_ARB_query_buffer_object
   GL_ARB_robust_buffer_access_behavior
   GL_ARB_robustness
   GL_ARB_robustness_isolation
   GL_ARB_sample_shading
   GL_ARB_sampler_objects
   GL_ARB_seamless_cube_map
   GL_ARB_seamless_cubemap_per_texture
   GL_ARB_separate_shader_objects
   GL_ARB_shader_atomic_counter_ops
   GL_ARB_shader_atomic_counters
   GL_ARB_shader_bit_encoding
   GL_ARB_shader_draw_parameters
   GL_ARB_shader_group_vote
   GL_ARB_shader_image_load_store
   GL_ARB_shader_image_size
   GL_ARB_shader_objects
   GL_ARB_shader_precision
   GL_ARB_shader_stencil_export
   GL_ARB_shader_storage_buffer_object
   GL_ARB_shader_subroutine
   GL_ARB_shader_texture_image_samples
   GL_ARB_shading_language_100
   GL_ARB_shading_language_420pack
   GL_ARB_shading_language_packing
   GL_ARB_shadow
   GL_ARB_spirv_extensions
   GL_ARB_stencil_texturing
   GL_ARB_sync
   GL_ARB_tessellation_shader
   GL_ARB_texture_barrier
   GL_ARB_texture_border_clamp
   GL_ARB_texture_buffer_object
   GL_ARB_texture_buffer_object_rgb32
   GL_ARB_texture_buffer_range
   GL_ARB_texture_compression
   GL_ARB_texture_compression_bptc
   GL_ARB_texture_compression_rgtc
   GL_ARB_texture_cube_map
   GL_ARB_texture_cube_map_array
   GL_ARB_texture_env_add
   GL_ARB_texture_env_combine
   GL_ARB_texture_env_crossbar
   GL_ARB_texture_env_dot3
   GL_ARB_texture_filter_anisotropic
   GL_ARB_texture_float
   GL_ARB_texture_gather
   GL_ARB_texture_mirror_clamp_to_edge
   GL_ARB_texture_mirrored_repeat
   GL_ARB_texture_multisample
   GL_ARB_texture_non_power_of_two
   GL_ARB_texture_query_levels
   GL_ARB_texture_query_lod
   GL_ARB_texture_rectangle
   GL_ARB_texture_rg
   GL_ARB_texture_rgb10_a2ui
   GL_ARB_texture_stencil8
   GL_ARB_texture_storage
   GL_ARB_texture_storage_multisample
   GL_ARB_texture_swizzle
   GL_ARB_texture_view
   GL_ARB_timer_query
   GL_ARB_transform_feedback2
   GL_ARB_transform_feedback3
   GL_ARB_transform_feedback_instanced
   GL_ARB_transform_feedback_overflow_query
   GL_ARB_transpose_matrix
   GL_ARB_uniform_buffer_object
   GL_ARB_vertex_array_bgra
   GL_ARB_vertex_array_object
   GL_ARB_vertex_attrib_64bit
   GL_ARB_vertex_attrib_binding
   GL_ARB_vertex_buffer_object
   GL_ARB_vertex_program
   GL_ARB_vertex_shader
   GL_ARB_vertex_type_10f_11f_11f_rev
   GL_ARB_vertex_type_2_10_10_10_rev
   GL_ARB_viewport_array
   GL_ARB_window_pos
   GL_ATI_separate_stencil
   GL_EXT_abgr
   GL_EXT_bgra
   GL_EXT_blend_color
   GL_EXT_blend_equation_separate
   GL_EXT_blend_func_separate
   GL_EXT_blend_minmax
   GL_EXT_blend_subtract
   GL_EXT_clip_volume_hint
   GL_EXT_compiled_vertex_array
   GL_EXT_depth_bounds_test
   GL_EXT_direct_state_access
   GL_EXT_draw_buffers2
   GL_EXT_draw_range_elements
   GL_EXT_fog_coord
   GL_EXT_framebuffer_blit
   GL_EXT_framebuffer_multisample
   GL_EXT_framebuffer_object
   GL_EXT_geometry_shader4
   GL_EXT_gpu_program_parameters
   GL_EXT_gpu_shader4
   GL_EXT_memory_object
   GL_EXT_memory_object_win32
   GL_EXT_multi_draw_arrays
   GL_EXT_packed_depth_stencil
   GL_EXT_packed_float
   GL_EXT_packed_pixels
   GL_EXT_polygon_offset_clamp
   GL_EXT_rescale_normal
   GL_EXT_secondary_color
   GL_EXT_semaphore
   GL_EXT_semaphore_win32
   GL_EXT_separate_specular_color
   GL_EXT_shader_framebuffer_fetch
   GL_EXT_shader_integer_mix
   GL_EXT_shadow_funcs
   GL_EXT_stencil_two_side
   GL_EXT_stencil_wrap
   GL_EXT_texture3D
   GL_EXT_texture_array
   GL_EXT_texture_compression_s3tc
   GL_EXT_texture_edge_clamp
   GL_EXT_texture_env_add
   GL_EXT_texture_env_combine
   GL_EXT_texture_filter_anisotropic
   GL_EXT_texture_integer
   GL_EXT_texture_lod_bias
   GL_EXT_texture_rectangle
   GL_EXT_texture_sRGB
   GL_EXT_texture_sRGB_decode
   GL_EXT_texture_shared_exponent
   GL_EXT_texture_snorm
   GL_EXT_texture_storage
   GL_EXT_texture_swizzle
   GL_EXT_timer_query
   GL_EXT_transform_feedback
   GL_IBM_texture_mirrored_repeat
   GL_INTEL_conservative_rasterization
   GL_INTEL_fragment_shader_ordering
   GL_INTEL_framebuffer_CMAA
   GL_INTEL_map_texture
   GL_INTEL_multi_rate_fragment_shader
   GL_INTEL_performance_query
   GL_KHR_blend_equation_advanced
   GL_KHR_blend_equation_advanced_coherent
   GL_KHR_context_flush_control
   GL_KHR_debug
   GL_KHR_no_error
   GL_KHR_shader_subgroup
   GL_KHR_shader_subgroup_arithmetic
   GL_KHR_shader_subgroup_ballot
   GL_KHR_shader_subgroup_basic
   GL_KHR_shader_subgroup_clustered
   GL_KHR_shader_subgroup_quad
   GL_KHR_shader_subgroup_shuffle
   GL_KHR_shader_subgroup_shuffle_relative
   GL_KHR_shader_subgroup_vote
   GL_KHR_texture_compression_astc_ldr
   GL_NV_blend_square
   GL_NV_conditional_render
   GL_NV_primitive_restart
   GL_NV_texgen_reflection
   GL_OVR_multiview
   GL_SGIS_generate_mipmap
   GL_SGIS_texture_edge_clamp
   GL_SGIS_texture_lod
   GL_SUN_multi_draw_arrays
   GL_WIN_swap_hint
   WGL_EXT_swap_control

pyglet.gl.glu_info
------------------------------------------------------------------------------
glu_info.get_version(): 1.2.2.0 Microsoft Corporation
glu_info.get_extensions():
   GL_EXT_bgra

pyglet.gl.glx_info
------------------------------------------------------------------------------
GLX not available.

pyglet.media
------------------------------------------------------------------------------
audio driver: <pyglet.media.drivers.xaudio2.adaptation.XAudio2Driver object at 0x0000023658F988E0>

pyglet.media.ffmpeg
------------------------------------------------------------------------------
FFmpeg not available.

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL 'openal32', handle 10000000 at 0x236635da2f0>
Version: 1.1
Extensions:
   ALC_ENUMERATE_ALL_EXT
   ALC_ENUMERATION_EXT
   ALC_EXT_CAPTURE
   ALC_EXT_EFX

pyglet.input.wintab
------------------------------------------------------------------------------
WinTab not available.

info for not working:

Platform
------------------------------------------------------------------------------
platform:  Windows-10-10.0.22631-SP0
release:   10
machine:   AMD64

Python
------------------------------------------------------------------------------
implementation: CPython
sys.version: 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]
sys.maxint: 9223372036854775807
os.getcwd(): C:\Users\user\Documents\git\qtextras\examples

pyglet
------------------------------------------------------------------------------
pyglet.version: 2.0.15
pyglet.compat_platform: win32
pyglet.__file__: C:\Users\user\AppData\Local\pypoetry\Cache\virtualenvs\qtextras-EeoUgCsC-py3.10\lib\site-packages\pyglet\__init__.py
pyglet.options['audio'] = ('xaudio2', 'directsound', 'openal', 'pulse', 'silent')
pyglet.options['debug_font'] = False
pyglet.options['debug_gl'] = True
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_gl_trace_args'] = False
pyglet.options['debug_gl_shaders'] = False
pyglet.options['debug_graphics_batch'] = False
pyglet.options['debug_lib'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_texture'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_trace_args'] = False
pyglet.options['debug_trace_depth'] = 1
pyglet.options['debug_trace_flush'] = True
pyglet.options['debug_win32'] = False
pyglet.options['debug_input'] = False
pyglet.options['debug_x11'] = False
pyglet.options['shadow_window'] = True
pyglet.options['vsync'] = None
pyglet.options['xsync'] = True
pyglet.options['xlib_fullscreen_override_redirect'] = False
pyglet.options['search_local_libs'] = True
pyglet.options['win32_gdi_font'] = False
pyglet.options['headless'] = False
pyglet.options['headless_device'] = 0
pyglet.options['win32_disable_shaping'] = False
pyglet.options['dw_legacy_naming'] = False
pyglet.options['win32_disable_xinput'] = False
pyglet.options['com_mta'] = False
pyglet.options['osx_alt_loop'] = False

pyglet.window
------------------------------------------------------------------------------
display: <pyglet.canvas.win32.Win32Display object at 0x0000013A12A39720>
screens[0]: Win32Screen(x=0, y=0, width=1366, height=768)
screens[1]: Win32Screen(x=-2469, y=-2160, width=2560, height=1440)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 32
config['aux_buffers'] = 0
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 10
config['green_size'] = 10
config['blue_size'] = 10
config['alpha_size'] = 2
config['depth_size'] = 24
config['stencil_size'] = 8
config['accum_red_size'] = 0
config['accum_green_size'] = 0
config['accum_blue_size'] = 0
config['accum_alpha_size'] = 0
config['major_version'] = 3
config['minor_version'] = 3
config['forward_compatible'] = None
config['opengl_api'] = 'gl'
config['debug'] = None
context: Win32ARBContext(id=1348927132272, share=Win32Context(id=1348932445200, share=None))

window.context._info
------------------------------------------------------------------------------
gl_info.get_version(): (3, 3)
gl_info.get_vendor(): Intel
gl_info.get_renderer(): Intel(R) Iris(R) Xe Graphics

pyglet.gl.glx_info
------------------------------------------------------------------------------
GLX not available.

pyglet.media
------------------------------------------------------------------------------
audio driver: <pyglet.media.drivers.xaudio2.adaptation.XAudio2Driver object at 0x0000013A134BA9E0>

pyglet.media.ffmpeg
------------------------------------------------------------------------------
FFmpeg not available.

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL 'openal32', handle 10000000 at 0x13a1345e140>
Version: 1.1
Extensions:
   ALC_ENUMERATE_ALL_EXT
   ALC_ENUMERATION_EXT
   ALC_EXT_CAPTURE
   ALC_EXT_EFX

pyglet.input.wintab
------------------------------------------------------------------------------
WinTab not available.

If this is no longer the recommended way of integrating with pyqt - or if this just isn't possible, please let me know. However would be great to have this working with the latest version of pyglet!

@Derfies Derfies added the bug Something isn't working label May 5, 2024
@benmoran56
Copy link
Member

benmoran56 commented May 6, 2024

Modern OpenGL is a bit pickier, and since pyglet 2.0 we are using a GL 3+ context. You can try this example which should work on recent releases: https://github.com/pyglet/pyglet/blob/master/contrib/qt_sprite_preview.py

Please note that mixing pyglet with other UI libraries is not supported. It can work, but we just can't provide support for it. Things can and do break as new versions come out, so your mileage will vary.

@benmoran56 benmoran56 reopened this May 6, 2024
@benmoran56
Copy link
Member

I would also suggest that if your UI needs are more basic, see if the pyglet.gui module will do the job. It's limited in scope to what you might need for a game, or simple visualization application, but can be used as an example to build custom widgets on.

@Derfies
Copy link
Author

Derfies commented May 7, 2024

@benmoran56 Thanks so much for the reply and the tips!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants