2017-02-17 198 views
0

我一直在尝试在一个窗口PyQt5中嵌入blenderplayer,但我收到两个窗口,而不是一个窗口PyQt嵌入搅拌机播放器。 请问你能帮我实现我的gol吗? 这是我的脚本:在一个窗口中嵌入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

你可能知道,搅拌机很大程度上依靠单一窗口界面上,这将进行游戏引擎。 blenderplayer的-i选项设置了parentwindowID--这与玩家使用的包含窗口不同,因为它是主屏幕。

如果您按照代码进行操作,您会发现将会创建一个新窗口,并且您将通过X11 it's parent is set to be the windowID。在窗口上,再次创建新窗口并将it's input device设置为父窗口使用的输入。所以这个选项不会做你期望的。

我不认为搅拌机会做你正在尝试的东西,而你没有改变和建立自己的搅拌机副本。

只是一个理论,但搅拌机(不是blenderplayer)有一个--window-borderless选项 - 您可能能够启动没有窗口边界的搅拌机,定位在正确的位置,以便它位于您想要的区域上而没有任何视觉区别。您可以使用启动脚本来启用游戏引擎并开始播放。当然,如果游戏窗口落在主窗口后面,并且不随之移动,您将遇到问题。

另一种方式是完全使用搅拌器,即使用布局将游戏放置在所需位置,然后用customise blender's interface创建您想要的位置。作为极端的一个例子,请看Fluid Designer - 它使用了搅拌器,但调整了UI以使其成为独特的应用程序。

+0

感谢您的回复。当我看到thoss链接时,我认为这样做是可行的,但是我的代码中缺少一些东西... – Zer2017