def __init__(self, *args, **kwargs): parent = kwargs.get('parent', None) super(UnrealWindow, self).__init__(*args, **kwargs) if not parent: unreal.parent_external_window_to_slate(self.winId()) print(self.parent())
def __init__(self, parent=None, **kwargs): super(UnrealWindow, self).__init__(parent, **kwargs) self.unreal = True self.standalone = False # Parenting external windows was only added in 4.20 try: unreal.parent_external_window_to_slate(self.winId()) except AttributeError: pass
def alert(msg=u"msg", title=u"警告", icon=QtWidgets.QMessageBox.Warning, button_text=u"确定"): # NOTE 生成 Qt 警告窗口 msg_box = QtWidgets.QMessageBox() msg_box.setIcon(icon) msg_box.setWindowTitle(title) msg_box.setText(msg) msg_box.addButton(button_text, QtWidgets.QMessageBox.AcceptRole) unreal.parent_external_window_to_slate(msg_box.winId()) dayu_theme.apply(msg_box) msg_box.exec_()
def wrapper(self, single=True, *args, **kwargs): if single: # TODO crash for win in QtWidgets.QApplication.allWidgets(): if win is self: continue elif self.__class__.__name__ in str(type(win)): win.deleteLater() win.close() res = func(self, *args, **kwargs) # NOTE https://forums.unrealengine.com/unreal-engine/unreal-studio/1526501-how-to-get-the-main-window-of-the-editor-to-parent-qt-or-pyside-application-to-it unreal.parent_external_window_to_slate(self.winId()) dayu_theme.apply(self) return res
def wrapper(self, single=True, *args, **kwargs): # NOTE 只保留一个当前类窗口 if single: for win in QtWidgets.QApplication.topLevelWidgets(): if win is self: continue elif self.__class__.__name__ in str(type(win)): win.deleteLater() # win.setParent(None) win.close() # NOTE https://forums.unrealengine.com/unreal-engine/unreal-studio/1526501-how-to-get-the-main-window-of-the-editor-to-parent-qt-or-pyside-application-to-it # NOTE 让窗口嵌入到 unreal 内部 unreal.parent_external_window_to_slate(self.winId()) res = func(self, *args, **kwargs) # NOTE 添加 dayu_widget 的样式 dayu_theme.apply(self) return res
def __init__(self, parent=None): super(QtWindowOne, self).__init__(parent) layout = QtGui.QVBoxLayout() self.setLayout(layout) self.label = QtGui.QLabel("Test") layout.addWidget(self.label) self.button = QtGui.QPushButton("click") self.button.clicked.connect(self.clickEvent) layout.addWidget(self.label) layout.addWidget(self.button) self.setWindowTitle(WINDOW_NAME) self.setGeometry(100, 100, self.width(), self.height()) unreal.parent_external_window_to_slate(self.winId())
def run_unreal(self, **kwargs): # https://github.com/20tab/UnrealEnginePython # https://forums.unrealengine.com/development-discussion/python-scripting/1674204-dock-qtwidget-to-unreal # https://github.com/AlexQuevillon/UnrealPythonLibrary/blob/master/UnrealProject/UnrealPythonLibrary/Plugins/UnrealPythonLibraryPlugin/Content/Python/PythonLibraries/QtFunctions.py # https://forums.unrealengine.com/unreal-engine/unreal-studio/1526501-how-to-get-the-main-window-of-the-editor-to-parent-qt-or-pyside-application-to-it app = QtWidgets.QApplication.instance() if not app: # create the first instance app = QtWidgets.QApplication(sys.argv) app.aboutToQuit.connect(self.on_exit_unreal) atexit.register(self.on_exit_unreal) self.boil = None self.event_loop = QtCore.QEventLoop() self.boil = self.guiClass(None, self.window_title, self.window_object) mayapalette.set_maya_palette_with_tweaks(PALETTE_FILEPATH) unreal.parent_external_window_to_slate(self.boil.winId()) self.boil.show()
def parent_qt_window(qt_widget): unreal.parent_external_window_to_slate(qt_widget.winId())
import unreal import site import sys site.addsitedir("C:/Python27/Lib/site-packages") from PySide import QtCore, QtGui, QtUiTools class VolumeSlider(QtGui.QDialog): def __init__(self, parent=None): super(VolumeSlider, self).__init__(parent) self.setWindowTitle("Visual Tech - Animation Importer") self.setGeometry(100, 50, self.width(), self.height()) self.importBtn = QtGui.QPushButton("Import Animation") layout = QtGui.QVBoxLayout() layout.addWidget(self.importBtn) self.setLayout(layout) APP = None if not QtGui.QApplication.instance(): APP = QtGui.QApplication(sys.argv) main_window = VolumeSlider() main_window.show() unreal.parent_external_window_to_slate(main_window.winId())
import sys from PySide2 import QtGui from PySide2 import QtWidgets import unreal class TestWidget(QtWidgets.QWidget): def __init__(self, parent=None): super(TestWidget, self).__init__(parent) vbox = QtWidgets.QVBoxLayout(self) btn = QtWidgets.QPushButton("Test") btn.clicked.connect(self.btn_clicked) vbox.addWidget(btn) def btn_clicked(self): print("Clicked") unreal.log("Clicked") app = None if not QtWidgets.QApplication.instance(): app = QtWidgets.QApplication(sys.argv) widget = TestWidget() widget.show() unreal.parent_external_window_to_slate(widget.winId())
__author__ = 'timmyliang' __email__ = '*****@*****.**' __date__ = '2020-01-09 12:57:22' """ """ import sys import Tkinter import tkMessageBox import unreal win = Tkinter.Tk() win.withdraw() unreal.parent_external_window_to_slate(win.winfo_id()) # tkMessageBox.showerror("错误", sys.argv[0]) win.mainloop() win.destroy() # class Error(object,tk.Toplevel): # def __init__(self, root ,message): # tk.Toplevel.__init__(self) # tk.Label(self, text=message).grid(row=0, column=0) # tk.Button(self, command=self.destroy, text="OK").grid(row=1, column=0) # self.lift() # Puts Window on top # self.grab_set() # Prevents other Tkinter windows from being used # self.root = root