Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

A binding to use Panda3D as a PyQt5 widget

Project description

QPanda3D

A working Panda3D wrapper for PyQt5 The objective is to be able to put on the same screen, panda3D and pyQT widgets.

This package is still a work in progress. What works :

  • Creating a panda3D world inside a seemlessly QWidget object that can be placed alog with other QT stuff
  • Full access to panda3D objects, lights ...

What doesn't work yet:

  • Mouse and keyboard interactions
  • QWidget resizing. For now, the widget size is fixed, which means that you can not use it alongside with other Qt widgets without cropping the 3D scene.

Installation

pip install QPanda3D

Usage

1 - create your world by inheriting from Panda3DWorld

from QPanda3D.Panda3DWorld import Panda3DWorld
class MyWorld(Panda3DWorld):
        Panda3DWorld.__init__(self)
        # from this point, act as if you are defining a classic panda3D environment
        self.cam.setPos(0, -28, 6)
        self.testModel = loader.loadModel('panda')
        self.testModel.reparentTo(render)

2 - In your main, just create an instance of your world, create a Q

from QPanda3D.QPanda3DWidget import QPanda3DWidget
if __name__ == "__main__":    
    world = MyWorld() 

    app = QApplication(sys.argv)
    appw=QMainWindow()
    appw.setGeometry(50, 50, 800, 600)

    pandaWidget = QPanda3DWidget(world)
    appw.setCentralWidget(pandaWidget)
    appw.show()

    sys.exit(app.exec_())    

Widget resizing policy

Starting from V 0.4, the widget is automatically resized without making any stretching artefacts. Resizing policy parameters (introduced in V 0.2) have been removed since they are no more needed.

from QPanda3D.QPanda3DWidget import QPanda3DWidget
if __name__ == "__main__":    
    world = MyWorld() 

    app = QApplication(sys.argv)
    appw=QMainWindow()
    appw.setGeometry(50, 50, 800, 600)

    pandaWidget = QPanda3DWidget(world)
    appw.setCentralWidget(pandaWidget)
    appw.show()

    sys.exit(app.exec_())    

you can also tell the Panda3DWorld object what is the default view size that you prefer when creating it.

from QPanda3D.Panda3DWorld import Panda3DWorld
class MyWorld(Panda3DWorld):
        Panda3DWorld.__init__(self, width=1024, height=768)
        # from this point, act as if you are defining a classic panda3D environment
        self.cam.setPos(0, -28, 6)
        self.testModel = loader.loadModel('panda')
        self.testModel.reparentTo(render)

Just make sure that your ratio is adequate with your real widget size.

TODO

  • Add mouse and keyboard interactions

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for QPanda3D, version 0.2.5
Filename, size File type Python version Upload date Hashes
Filename, size QPanda3D-0.2.5-py3-none-any.whl (23.4 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size QPanda3D-0.2.5.tar.gz (10.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page