QCompleter зависает в QLineEdit во втором диалоговом окне при нажатии на всплывающий элемент в pyqt5

#python #pyqt #pyqt5 #qdialog #qcompleter

#python #pyqt #pyqt5 #qdialog #qcompleter

Вопрос:

Демонстрация PYQT5 покажет модальное пользовательское окно QDialog при нажатии кнопки на QMainWindow.В QDialog есть QLineEdit с QCompleter.Клавиши Down amp; Up доступны для выбора всплывающего элемента, но я не могу использовать мышь, чтобы щелкнуть и выбрать его, потому что всплывающее окно заморожено.Я также хочу, чтобы текст всплывающего элемента не добавлялся в QLineEdit автоматически при использовании клавиши Down amp; Up, только если я использую мышь для щелчка по элементу.

 import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QWidget, QVBoxLayout, QDialog, QLineEdit, QCompleter

items_list = ['John Doe', 'Jane Doe', 'Albert Einstein', 'Alfred E Newman']


class SecondDialog(QDialog):
    def __init__(self):
        super(SecondDialog, self).__init__()
        self.v_layout = QVBoxLayout()
        self.my_edit = QLineEdit()
        self.completer = QCompleter(items_list)
        self.my_edit.setCompleter(self.completer)
        self.v_layout.addWidget(self.my_edit)
        self.setLayout(self.v_layout)

class MyWindows(QMainWindow):
    def __init__(self):
        super(MyWindows, self).__init__()
        self.widget = QWidget()
        self.v_layout = QVBoxLayout(self.widget)
        self.my_btn = QPushButton("Open second Dialog")
        self.my_btn.clicked.connect(self.openDialog)
        self.v_layout.addWidget(self.my_btn)
        self.setCentralWidget(self.widget)

    def openDialog(self):
        d = SecondDialog()
        d.exec_()

if __name__ == '__main__':
   app = QApplication(sys.argv)
   w = MyWindows()
   w.show()
   sys.exit(app.exec_())
  

Комментарии:

1. ммм, не могли бы вы дать подробную процедуру для воспроизведения «замораживания», что вы подразумеваете под «замораживанием»? Вы могли бы указать характеристики вашей среды: ОС, версия python, версия pyqt5 и т.д. Я тестировал python 3.8 и PyQt5 5.15 в Linux и не наблюдаю никаких зависаний.

2. @eyllanesc Я использую MacBook pro 10.15.5 / Python 3.8 / PyQt5 5.15.0.»замораживание» означает, что я ввожу символ «J» в QLineEdit, во всплывающем окне появятся два элемента («Джон Доу», «Джейн Доу»), но я не могу щелкнуть эти два элемента с помощью мыши.

3. Я не наблюдаю никаких проблем, точно так же, как eyllanesc. Код работает так, как вы ожидаете.

4. @TilmanK Я тестирую на Windows 10, код действительно работает так, как я ожидаю. Однако та же проблема все еще существует, когда я запускаю код на macOS Catalina 10.15.5.