2017-02-17 199 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