# 使用Pyside6以及非基础模块 安装Pyside6 ``` pip install PySide6 ``` 默认情况下需要添加路径才能调用下载的库,执行以下代码即可: ```python import sys import pathlib my_python_path = "C:\Python311\Lib\site-packages" sys.path.insert(0, my_python_path) ``` ## 其他模块 对于一些非基础模块,比如PySide6.QtWebSockets,需要执行以下命令进行安装: ```bash pip install PySide6-Addons ``` # WebSocketServer for Blender https://github.com/KoltesDigital/websocket-server-for-blender ## Pyside6实现 TODO:添加多线程,防止退出。 ```python server = QWebSocketServer() thread = QtCore.QThread() server.moveTOThread(thread) server.finished.connect(thread.quit) thread.started.connect(model.func_to_run) thread.finished.connect(fun_to_run_after_thread_finished) thread.start() thread.start() ``` ```python # blender --background test.blend --python mytest.py -- example args 123 import sys import pathlib # import pyside6 my_python_path = "C:\Python311\Lib\site-packages" sys.path.insert(0, my_python_path) import bpy from PySide6.QtNetwork import QHostAddress from PySide6.QtWebSockets import QWebSocket from PySide6.QtWebSockets import QWebSocketServer class QRetargetWebsocketServer(QWebSocketServer): def __init__(self): super(QRetargetWebsocketServer, self).__init__("RetargetWebsocketServer", QWebSocketServer.NonSecureMode) self.closed.connect(self.onClosed) self.newConnection.connect(self.onNewConnection) def onClosed(): print('connect closed!') def onNewConnection(self, context, event): client: QWebSocket = self.nextPendingConnection() client.textMessageReceived.connect(self.onTextReceived) def onTextReceived(self, text: str): client: QWebSocket = self.sender() if text == "Retarget": print("Retarget") client.sendTextMessage("Retarget") else: print("text:", text) # 提取输出的命 argv = sys.argv print(argv) # argv = argv[argv.index("--") + 1:] # get all args after "--" # print(argv) # --> ['example', 'args', '123'] WebSocketServer = QRetargetWebsocketServer() WebSocketServer.listen(QHostAddress.LocalHost,9091) ``` # Http Server ```python bl_info = { "name": "My Awesome Server", "blender": (2, 80, 0), "category": "Object", } from http.server import BaseHTTPRequestHandler, HTTPServer import threading import bpy class MyServer(BaseHTTPRequestHandler): def do_GET(self): if self.path == '/test': self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() message = "This is a test page2." self.wfile.write(bytes(message, "utf8")) else: self.send_response(404) self.send_header('Content-type','text/html') self.end_headers() message = "404 Not Found." self.wfile.write(bytes(message, "utf8")) return httpd = None thread = None thread2 = None def start_server(): global httpd server_address = ('localhost', 8080) # Server is not running, start it httpd = HTTPServer(server_address, MyServer) print("Server started") httpd.serve_forever() def stop_server(): global httpd global thread httpd.shutdown() thread.join() print("Server stopped") def stop_server_thread(): global thread2 thread2 = threading.Thread(target=stop_server) thread2.start() def register(): global thread print("Hello World") # Start the server on a new thread thread = threading.Thread(target=start_server) thread.daemon = True thread.start() def unregister(): print("Goodbye World") stop_server_thread() global thread2 thread2.join() ``` # Blender CMD 启用插件 >./blender -b --addons animation_nodes,meshlint [file] --python [myscript.py] 这样就可以指定启用某某插件