栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

pyqt5自动完成QLineEdit-Google Places自动完成

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyqt5自动完成QLineEdit-Google Places自动完成

对于这种情况,您可以创建一个使用Place Autocomplete发出请求的自定义模型,并将该模型设置为QCompleter:

import jsonfrom PyQt5 import QtCore, QtGui, QtWidgets, QtNetworkAPI_KEY = "<API_KEY>"class SuggestionPlaceModel(QtGui.QStandardItemModel):    finished = QtCore.pyqtSignal()    error = QtCore.pyqtSignal(str)    def __init__(self, parent=None):        super(SuggestionPlaceModel, self).__init__(parent)        self._manager = QtNetwork.QNetworkAccessManager(self)        self._reply = None    @QtCore.pyqtSlot(str)    def search(self, text):        self.clear()        if self._reply is not None: self._reply.abort()        if text: r = self.create_request(text) self._reply = self._manager.get(r) self._reply.finished.connect(self.on_finished)        loop = QtCore.QEventLoop()        self.finished.connect(loop.quit)        loop.exec_()    def create_request(self, text):        url = QtCore.QUrl("https://maps.googleapis.com/maps/api/place/autocomplete/json")        query = QtCore.QUrlQuery()        query.addQueryItem("key", API_KEY)        query.addQueryItem("input", text)        query.addQueryItem("types", "geopre")        query.addQueryItem("language", "en")        url.setQuery(query)        request = QtNetwork.QNetworkRequest(url)        return request    @QtCore.pyqtSlot()    def on_finished(self):        reply = self.sender()        if reply.error() == QtNetwork.QNetworkReply.NoError: data = json.loads(reply.readAll().data()) if data['status'] == 'OK':     for prediction in data['predictions']:         self.appendRow(QtGui.QStandardItem(prediction['description'])) self.error.emit(data['status'])        self.finished.emit()        reply.deleteLater()        self._reply = Noneclass Completer(QtWidgets.QCompleter):    def splitPath(self, path):        self.model().search(path)        return super(Completer, self).splitPath(path)class Widget(QtWidgets.QWidget):    def __init__(self, parent=None):        super(Widget, self).__init__(parent)        self._model = SuggestionPlaceModel(self)        completer = Completer(self, caseSensitivity=QtCore.Qt.CaseInsensitive)        completer.setModel(self._model)        lineedit = QtWidgets.QLineEdit()        lineedit.setCompleter(completer)        label = QtWidgets.QLabel()        self._model.error.connect(label.setText)        lay = QtWidgets.QFormLayout(self)        lay.addRow("Location: ", lineedit)        lay.addRow("Error: ", label)if __name__ == '__main__':    import sys    app = QtWidgets.QApplication(sys.argv)    w = Widget()    w.resize(400, w.sizeHint().height())    w.show()    sys.exit(app.exec_())



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号