Based on example code from https://discourse.panda3d.org/t/an-example-of-panda3d-integration-into-tkinter/28329, as suggested by user acw1668, I got a Panda3D window to run in a Tkinter app.
from direct.showbase.ShowBase import ShowBase
from panda3d.core import WindowProperties
import tkinter as tk
from tkinter import Button
class AppTk(ShowBase):
def __init__(self):
ShowBase.__init__(self, windowType='none')
self.startTk()
self.tk = self.tkRoot
self.tk.geometry("500x400")
self.label_frame = tk.LabelFrame(self.tk, text='Panda3D Example', width=420, height=340)
self.label_frame.pack()
button = Button(self.tk, text='Click me !', bd='5', command=self.test)
button.pack()
# Set properties of the Panda3D window
props = WindowProperties()
props.set_parent_window(self.label_frame.winfo_id()) # Display within the label frame
props.set_origin(10, 20) # Relative to the label frame
props.set_size(400, 300)
self.make_default_pipe()
self.open_default_window(props=props)
scene = self.loader.load_model("environment")
scene.reparent_to(self.render)
def test(self):
print("Hello")
app = AppTk()
app.run()
Screenshot:
PNG
Note: I had to run pip install Pmw
for this to work, which I believe is an unlisted dependency of Panda3D.