У меня проблема.
Я реализовал функцию фильтрации с использованием QComboBox в 3dsMax 2016.
А теперь я хочу реализовать функцию фильтрации в 3dsMax 2018.
Итак, я изменил свой код. PySide to PySide2.
Функция фильтрации работает. но печатать не видно.
Это мой код
from PySide2.QtWidgets import QComboBox, QApplication, QCompleter, QLineEdit
from PySide2.QtCore import Qt, QSortFilterProxyModel
from PySide2.QtGui import QStandardItemModel,QStandardItem
from PySide2 import QtWidgets, QtCore, QtGui
import MaxPlus
class SuperDuperText(QtWidgets.QLineEdit):
def focusInEvent(self, event):
MaxPlus.CUI.DisableAccelerators()
def focusOutEvent(self, event):
MaxPlus.CUI.EnableAccelerators()
class ExtendedCombo( QtWidgets.QComboBox ):
def __init__( self, parent = None):
super( ExtendedCombo, self ).__init__( parent )
self.setFocusPolicy( Qt.StrongFocus )
self.setEditable(True)
self.completer = QCompleter( self )
self.completer.setCompletionMode( QCompleter.UnfilteredPopupCompletion )
self.pFilterModel = QSortFilterProxyModel( self )
self.pFilterModel.setFilterCaseSensitivity( Qt.CaseInsensitive )
self.completer.setPopup( self.view() )
self.setCompleter( self.completer )
# SuperDuperText().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString )
# self.lineEdit().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString )
# print self.lineEdit().echoMode() is return Normal
self.lineEdit().textEdited[unicode].connect(
self.pFilterModel.setFilterFixedString)
self.completer.activated.connect(self.setTextIfCompleterIsClicked)
def setModel( self, model ):
super(ExtendedCombo, self).setModel( model )
self.pFilterModel.setSourceModel( model )
self.completer.setModel(self.pFilterModel)
def setModelColumn( self, column ):
self.completer.setCompletionColumn( column )
self.pFilterModel.setFilterKeyColumn( column )
super(ExtendedCombo, self).setModelColumn( column )
def view( self ):
return self.completer.popup()
def index( self ):
return self.currentIndex()
def setTextIfCompleterIsClicked(self, text):
if text:
index = self.findText(text)
self.setCurrentIndex(index)
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)
model = QStandardItemModel()
for i, word in enumerate(['hola', 'adios', 'hello', 'good bye']):
item = QStandardItem(word)
model.setItem(i, 0, item)
combo = ExtendedCombo()
combo.setModel(model)
combo.setModelColumn(0)
mainLayout.addWidget(combo)
self.setLayout(mainLayout)
if __name__ == "__main__":
ui = SuperDuperUI()
ui.show()
Я думаю, что QLineedit QCombobox имеет проблему с фокусом. Может быть, ......
Я попытался переопределить qlineedit qcombobox в SuperDuperText, но не смог.
Спасибо всем, кто прочитал мою проблему.