I have an existing open window, created by SDL 2 in C/C++. I would like the process to call a python script (using Boost/Python) to add some GUI elements to it.
Here's a non-working example:
import sys
import sdl2
import sdl2.ext
import tkinter as tk
from tkinter import *
# Initialize SDL2
sdl2.ext.init()
# Set up the window
window_width = 800
window_height = 600
window_title = "SDL2 Window"
window = sdl2.ext.Window(window_title, size=(window_width, window_height))
window.show()
# Get SDL handle for the window
wminfo = sdl2.SDL_SysWMinfo()
sdl2.SDL_VERSION(wminfo.version)
window_id = sdl2.SDL_GetWindowWMInfo(window.window, wminfo)
print(wminfo.info.win.window)
#tkinter
The tkinter code examples mentioned below come here
Looking at https://docs.python.org/3/library/tkinter.html#tkinter.Tk, I see that
use
Specifies the id of the window in which to embed the application, instead of it being created as an independent toplevel window.
However, it also adds
Note that on some platforms this will only work correctly if id refers to a Tk frame or toplevel that has its -container option enabled.
Running the following prints a window id similar to window_id above.
root = tk.Tk()
tk_id = root.winfo_id()
Running child = tk.Tk(use=str(wminfo.info.win.window)) causes python to exit without an exception. VS Code writes Server[1] disconnected unexpectedly but I don't think this is the X11 server but rather the debugger.
Running root = tk.Tk() child = tk.Tk(use=str(tk_id)) causes python to exit as well.
Can this be done at all? Am I missing something simple here?
importorsubprocess? What kind of GUI elements?tkinterorSDL? Also you should provide a minimal reproducible example and elaborate more clearly what your issue is.