是否有自动选择一个自动完成选项,如果只有一个显示使用PyQT?



我试图为用户建立一个非常省时的方式来存储信息。它使用一个文本界面来导航存储数据的树。我的UI在所有方面都很完美,但有一点除外;它强制您按下向下箭头,然后输入以自动完成,即使给定输入的子字符串只有一个可能的选项。

例如,假设以下是给定节点 上的选项
Potato
Cabbage
Dave
Dove
Double

一旦你输入了" ",你唯一可能引用的就是"Potato"。我希望它选择"土豆",而不是强迫用户按"下"键。然后"输入"为了选择它。这可能使用PyQT吗?如果是这样,有哪些实现方案?

一种可能的解决方案是使用completionModel()modelReset,rowsInsertedrowsRemoved信号,然后检查行数是否为1,选择行然后隐藏弹出

from PyQt5.QtCore import QItemSelectionModel, QMetaObject, Qt
from PyQt5.QtWidgets import QApplication, QCompleter, QLineEdit

class Completer(QCompleter):
def init(self):
self.completionModel().modelReset.connect(self._handle_count_changed)
self.completionModel().rowsInserted.connect(self._handle_count_changed)
self.completionModel().rowsRemoved.connect(self._handle_count_changed)
def _handle_count_changed(self):
if self.popup().isVisible() and self.completionModel().rowCount() == 1:
self.popup().selectionModel().select(
self.currentIndex(), QItemSelectionModel.Select
)
QMetaObject.invokeMethod(self.popup(), "hide", Qt.QueuedConnection)

def main():
app = QApplication([])
words = ["Potato", "Cabbage", "Dave", "Dove", "Double"]
lineedit = QLineEdit()
lineedit.resize(320, lineedit.sizeHint().height())
lineedit.show()
completer = Completer(words, caseSensitivity=Qt.CaseInsensitive)
completer.init()
lineedit.setCompleter(completer)
app.exec_()

if __name__ == "__main__":
main()

相关内容

最新更新