3DS Max 2018 Pyside2 - 文本输入不工作
3DS Max 2018 Pyside2 - Text input not working
我正在为 3DS Max 2018 在 python 中编写一个 UI,但我无法让任何文本输入正常工作,尽管到目前为止我尝试的其他一切都工作正常。由于某种原因,它似乎无法读取击键。它们由 Max 注册,它会做一些适当的事情,比如当我按下 'm' 而不是键入 'm' 时启动 material 编辑器。我尝试打印出按键,但它看起来像控制、alt 和 shift 工作。
我什至尝试了 运行 Max 附带的示例脚本并得到了同样的错误,所以我意识到这可能是某种错误但是我不相信 Autodesk 现在会修复它所以我我正在寻找解决方法...
下面是一个测试示例:
from PySide2 import QtWidgets, QtCore, QtGui
import MaxPlus
import os
class SampleUI(QtWidgets.QDialog):
def __init__(self, parent=MaxPlus.GetQMaxMainWindow()):
super(SampleUI, self).__init__(parent)
self.initUI()
def initUI(self):
self.testBtn = QtWidgets.QPushButton("Test")
mainLayout = QtWidgets.QHBoxLayout()
testBox = QtWidgets.QLineEdit("Test!")
mainLayout.addWidget(testBox)
self.setLayout(mainLayout)
if __name__ == "__main__":
try:
ui.close()
except:
pass
ui = SampleUI()
ui.show()
"In order to capture keyboard input for your Qt windows, you must disable the 3ds Max keyboard accelerators by calling the following when your UI control gets focus:"
参考命令为:MaxPlus.CUI.DisableAccelerators()
并且不要忘记在脚本失去焦点时撤消它:MaxPlus.CUI.EnableAccelerators()
这是我在 Autodesks 论坛页面上找到的一个简单 ui:
max 文档中有 quite 很多歧义uity,一直都是,但希望对您有所帮助。我在不同的脚本中对此进行了一些编辑,我将 self 添加到控件中,以便能够访问控件并在不同的函数中设置连接,并且效果很好。
虽然这很乏味,但我仍然觉得 python 实施笨拙且繁琐。我仍然更喜欢使用 Maya Python,它一直很可靠,但我现在必须使用 MaxPlus。
from PySide2 import QtWidgets, QtCore, QtGui
import MaxPlus
import os
class SuperDuperText(QtWidgets.QLineEdit):
def focusInEvent(self, event):
MaxPlus.CUI.DisableAccelerators()
def focusOutEvent(self, event):
MaxPlus.CUI.EnableAccelerators()
class SuperDuperUI(QtWidgets.QDialog):
def __init__(self, parent=MaxPlus.GetQMaxMainWindow()):
super(SuperDuperUI, self).__init__(parent)
self.setWindowTitle("Sample UI")
self.initUI()
def initUI(self):
mainLayout = QtWidgets.QVBoxLayout()
maxScriptsDir = MaxPlus.PathManager.GetScriptsDir()
testLabel = QtWidgets.QLabel("Your scripts dir is: " + maxScriptsDir)
mainLayout.addWidget(testLabel)
testBtn = QtWidgets.QPushButton("This does nothing.")
mainLayout.addWidget(testBtn)
testEdit = SuperDuperText()
testEdit.setPlaceholderText("You can type in here if you like...")
mainLayout.addWidget(testEdit)
self.setLayout(mainLayout)
if __name__ == "__main__":
try:
ui.close()
except:
pass
ui = SuperDuperUI()
ui.show()
我正在为 3DS Max 2018 在 python 中编写一个 UI,但我无法让任何文本输入正常工作,尽管到目前为止我尝试的其他一切都工作正常。由于某种原因,它似乎无法读取击键。它们由 Max 注册,它会做一些适当的事情,比如当我按下 'm' 而不是键入 'm' 时启动 material 编辑器。我尝试打印出按键,但它看起来像控制、alt 和 shift 工作。
我什至尝试了 运行 Max 附带的示例脚本并得到了同样的错误,所以我意识到这可能是某种错误但是我不相信 Autodesk 现在会修复它所以我我正在寻找解决方法...
下面是一个测试示例:
from PySide2 import QtWidgets, QtCore, QtGui
import MaxPlus
import os
class SampleUI(QtWidgets.QDialog):
def __init__(self, parent=MaxPlus.GetQMaxMainWindow()):
super(SampleUI, self).__init__(parent)
self.initUI()
def initUI(self):
self.testBtn = QtWidgets.QPushButton("Test")
mainLayout = QtWidgets.QHBoxLayout()
testBox = QtWidgets.QLineEdit("Test!")
mainLayout.addWidget(testBox)
self.setLayout(mainLayout)
if __name__ == "__main__":
try:
ui.close()
except:
pass
ui = SampleUI()
ui.show()
"In order to capture keyboard input for your Qt windows, you must disable the 3ds Max keyboard accelerators by calling the following when your UI control gets focus:"
参考命令为:MaxPlus.CUI.DisableAccelerators()
并且不要忘记在脚本失去焦点时撤消它:MaxPlus.CUI.EnableAccelerators()
这是我在 Autodesks 论坛页面上找到的一个简单 ui:
max 文档中有 quite 很多歧义uity,一直都是,但希望对您有所帮助。我在不同的脚本中对此进行了一些编辑,我将 self 添加到控件中,以便能够访问控件并在不同的函数中设置连接,并且效果很好。
虽然这很乏味,但我仍然觉得 python 实施笨拙且繁琐。我仍然更喜欢使用 Maya Python,它一直很可靠,但我现在必须使用 MaxPlus。
from PySide2 import QtWidgets, QtCore, QtGui
import MaxPlus
import os
class SuperDuperText(QtWidgets.QLineEdit):
def focusInEvent(self, event):
MaxPlus.CUI.DisableAccelerators()
def focusOutEvent(self, event):
MaxPlus.CUI.EnableAccelerators()
class SuperDuperUI(QtWidgets.QDialog):
def __init__(self, parent=MaxPlus.GetQMaxMainWindow()):
super(SuperDuperUI, self).__init__(parent)
self.setWindowTitle("Sample UI")
self.initUI()
def initUI(self):
mainLayout = QtWidgets.QVBoxLayout()
maxScriptsDir = MaxPlus.PathManager.GetScriptsDir()
testLabel = QtWidgets.QLabel("Your scripts dir is: " + maxScriptsDir)
mainLayout.addWidget(testLabel)
testBtn = QtWidgets.QPushButton("This does nothing.")
mainLayout.addWidget(testBtn)
testEdit = SuperDuperText()
testEdit.setPlaceholderText("You can type in here if you like...")
mainLayout.addWidget(testEdit)
self.setLayout(mainLayout)
if __name__ == "__main__":
try:
ui.close()
except:
pass
ui = SuperDuperUI()
ui.show()