2014-12-10 3 views
1

저는 PyQt 질문을 꽤 간단하게 가지고 있습니다. (Python 3.4, PyQt 4.11.3, Qt 4.8.5) Qt Designer (Ui_Dialog)를 사용하여 매우 간단한 대화 상자를 만들었습니다. 이 개체에는 QPushButton, QLineEdit 및 QListWidget이 있습니다. Ui_Dialog에서 상속받은 다른 객체를 작성하고 QLineEdit의 returnPressed 신호를 설정하여 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이됩니다. 즉, 대화 상자에서 Enter를 누를 때마다 버튼에 현재 키보드 포커스가 없더라도 버튼에 프레스 이벤트가 수신됨을 의미합니다.

따라서 이 목록 위젯에 추가됩니다. 즉, 자동 기본 버튼으로 즉시 지워집니다. (: 당신은 또한 Qt는 디자이너에서이 속성을 변경할 수 있습니다 NB)

self.pushButton.setAutoDefault(False) 

가 :

은과 같이 자동 기본을 다시,이 문제를 해결합니다.

+0

매우 유용한 팁 주셔서 감사합니다. 나는이 머리로 벽에 머리를 치고 있었다. 나는 그것이 내가 생각했던 것을 실제로하고 있었기 때문에 기쁘다. 앞으로 이러한 기본 동작을주의해야합니다. – Ryan