如果使用 PyQT 只显示一个,是否有自动 select 自动完成选项?
Is there anyway to automatically select an autocomplete option if only one is shown using PyQT?
我正在尝试为用户构建一种非常省时的信息存储方式。它使用文本界面来导航存储数据的树。我有一个 UI 构建的,除了一个之外,它在所有方面都很完美;它会强制您按下向下箭头,然后输入以自动完成,即使输入的子字符串只有一个可能的选项。
例如,假设以下是给定节点的选项
Potato
Cabbage
Dave
Dove
Double
一旦您输入了“P”,您唯一可能引用的就是“Potato”。我想要 select 土豆,而不是强迫用户按“向下”然后“输入”才能 select 它。这可能使用 PyQT 吗?如果是,有哪些实施方案?
一种可能的解决方案是使用来自completionModel()
的modelReset
、rowsInserted
和rowsRemoved
信号,然后检查行数是否为1到select 行,然后隐藏弹出窗口。
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()
我正在尝试为用户构建一种非常省时的信息存储方式。它使用文本界面来导航存储数据的树。我有一个 UI 构建的,除了一个之外,它在所有方面都很完美;它会强制您按下向下箭头,然后输入以自动完成,即使输入的子字符串只有一个可能的选项。
例如,假设以下是给定节点的选项
Potato
Cabbage
Dave
Dove
Double
一旦您输入了“P”,您唯一可能引用的就是“Potato”。我想要 select 土豆,而不是强迫用户按“向下”然后“输入”才能 select 它。这可能使用 PyQT 吗?如果是,有哪些实施方案?
一种可能的解决方案是使用来自completionModel()
的modelReset
、rowsInserted
和rowsRemoved
信号,然后检查行数是否为1到select 行,然后隐藏弹出窗口。
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()