2017-02-17 31 views
0

Я пытаюсь вставить blenderplayer в окно PyQt5, но я получаю два окна вместо одного окна PyQt embed blender player. Не могли бы вы помочь мне, пожалуйста, достичь моего желания? это мой сценарий:Вставить blenderplayer в окно PyQt

import sys 
from PyQt5.QtCore import QProcess 
from PyQt5.QtGui import QWindow 
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, QPushButton, QFrame 

class embedBlender(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 
     self.setMinimumWidth(800) 
     self.setMinimumHeight(600) 
     self.frame = QFrame(self) 
     layout = QVBoxLayout(self) 
     layout.addWidget(self.frame) 
     layout.addWidget(QPushButton('button')) 
     self.process = QProcess(self) 
     # -i Window_ID -w Width Height X Y 
     self.process.start(' '.join(('blenderplayer -i', str(self.frame.winId().__int__()), '-w 400 400 c:\V2.blend'))) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    main = embedBlender() 
    main.show() 
    sys.exit(app.exec_()) 

ответ

0

Вы знаете, что блендер сильно наклоняется на одном интерфейсе окна, и это несет в игровой движок. Опция -i для blenderplayer устанавливает parentwindowID - это не то же самое, что и содержащее окно для проигрывателя, используемого в качестве основного дисплея.

Если вы выполните код, вы увидите, что будет создано новое окно, а на X11 it's parent is set to be the windowID вы пройдете. В окнах снова будет создано новое окно и it's input device будет установлен на вход, используемый родительским окном. Таким образом, опция не делает то, что вы ожидаете.

Я не думаю, что блендер будет делать то, что вы пытаетесь, без изменения и создания собственной копии блендера.

Только теория, но блендер (не blenderplayer) имеет опцию --window-borderless - вы можете запустить блендер без границ окна, расположенный в нужном месте, чтобы он находился над областью, в которой вы хотите, чтобы она была без визуального различие. Вы можете использовать сценарий запуска, чтобы включить движок игры и начать играть. Конечно, у вас будут проблемы с игровым окном, выходящим за главное окно и не двигающимся с ним.

Другой способ - использовать блендер целиком, то есть использовать макет, в котором размещается игра, где вы хотите, и customise blender's interface, чтобы создать то, что вы хотите вокруг нее. В качестве примера на крайнем конце, посмотрите на Fluid Designer - он использует blender, но настроил пользовательский интерфейс, чтобы превратить его в уникальное приложение.

+0

спасибо, что ответите. Когда я увидел ссылки thoss:, я думаю, что это возможно, но что-то не хватает в моем коде ... – Zer2017