这就是我从一开始就要做的事情:
# imports
from PyQt5 import QtWidgets,QtGui
import numpy as np
import pptk
import win32gui
import sys
# local imports
from designer import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(self.__class__,self).__init__()
self.setupUi(self)
self.cloudpoint = np.random.rand(100,3)
self.v = pptk.viewer(self.cloudpoint) # generate the viewer window
hwnd = win32gui.FindWindowEx(0,None,"viewer") # retrieve the window ID of the viewer
self.window = QtGui.QWindow.fromWinId(hwnd) # get the viewer inside a window
# embed the window inside the centralwidget of the MainWindow :
self.windowcontainer = self.createWindowContainer(self.window,self.centralwidget)
# finally,resize the container as you wish.
self.windowcontainer.resize(self.width() - 100,self.height() - 100)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
form = MainWindow()
form.show()
sys.exit(app.exec_())
设计器就像QtDesigner(带有QWidget centralwidget的QMainWindow)一样简单。我只是保存了草稿,并将其转换为.py文件。
这就是我得到的:
窗口容器的侧面仍然有黑条,我还没有发现如何使它们消失。
,
下面是一个演示脚本,显示了如何将查看器添加到布局。我无法在Windows上对其进行测试,但是在Linux(没有win32gui
部分)上,得到的结果如下所示。如您所见,没有奇怪的边框,并且可以正常调整窗口的大小。
from PyQt5 import QtWidgets,QtGui
import numpy as np
import pptk
import win32gui
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
widget = QtWidgets.QWidget()
layout = QtWidgets.QGridLayout(widget)
self.setCentralWidget(widget)
self.cloudpoint = np.random.rand(100,3)
self.v = pptk.viewer(self.cloudpoint)
hwnd = win32gui.FindWindowEx(0,"viewer")
self.window = QtGui.QWindow.fromWinId(hwnd)
self.windowcontainer = self.createWindowContainer(self.window,widget)
layout.addWidget(self.windowcontainer,0)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
form = MainWindow()
form.setWindowTitle('PPTK Embed')
form.setGeometry(100,100,600,500)
form.show()
sys.exit(app.exec_())
,
了解如何解决黑边问题。将PPTK查看器嵌入PyQt之前需要使其最大化,如下所示:
hwnd = win32gui.FindWindowEx(0,"viewer")
win32gui.ShowWindow(hwnd,win32con.SW_MAXIMIZE)
window = QtGui.QWindow.fromWinId(hwnd)
windowContainer = QtWidgets.QWidget.createWindowContainer(window)
然后将windowContainer添加到要在其中显示它的小部件中(如以上其他答案所述)。第二行是应该解决黑边问题的关键。
本文链接:https://www.f2er.com/3118204.html