2014-12-10 2 views
1

У меня довольно простой вопрос PyQt. (Python 3.4, PyQt 4.11.3, Qt 4.8.5). Я построил очень простой диалог с помощью Qt Designer (Ui_Dialog). Этот объект имеет QPushButton, QLineEdit и QListWidget. Я написал еще один объект, который наследует от Ui_Dialog, и устанавливает сигнал returnPressed из QLineEdit, который должен добавить некоторый текст в QListWidget. К сожалению, это не работает.PyQt: ListWidget.insertItem не показан

Вот мой код:

import sys 

from PyQt4 import QtGui 

from dialog import Ui_Dialog 

class ImDialog(QtGui.QDialog, Ui_Dialog): 
    def __init__(self): 
     super(ImDialog, self).__init__() 

     self.setupUi(self) 
     self.lineEdit.returnPressed.connect(self.additem) 
     self.pushButton.clicked.connect(self.listWidget.clear) 

    def additem(self): 
     text = self.lineEdit.text() 
     print(text) 
     self.listWidget.insertItem(0, text) 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    ui = ImDialog() 
    ui.show() 
    sys.exit(app.exec_()) 

текст в редакторе строки печатает отлично на терминал, но он не добавляется к listWidget.

Интересно, если я прокомментирую строку sys.exit и запустил ее в терминале IPython, я могу добавить столько же текста, сколько мне нравится в listWidget без проблем.

[In 1]: %run that_program.py 

[In 2]: ui.listWidget.insertItem(0, "Test") # This works fine 

Если у кого есть какие-либо предложения, чтобы получить эту работу (за пределами IPython), я был бы признателен за помощь. Спасибо

ответ

2

В вашем диалоговом окне есть только одна кнопка, и поэтому она станет auto-default. Это означает, что всякий раз, когда вы нажимаете кнопку ввода в диалоговом окне, кнопка получает событие пресса, даже если на данный момент он не имеет фокуса клавиатуры.

Таким образом, элемент делает, чтобы добавить его в список-виджет - это просто, что он сразу же очищается кнопкой авто-по умолчанию.

Чтобы это исправить, восстановить автоматическое значение по умолчанию так:

self.pushButton.setAutoDefault(False) 

(NB: Вы можете также изменить это свойство в Qt Designer).

+0

Благодарим вас за полезный отзыв. Я ударился головой о стену с этим. Я рад, что это действительно то, что я думал. В будущем я буду следить за этим поведением по умолчанию. – Ryan