【问题标题】:PyQt: ListWidget.insertItem not shownPyQt:未显示 ListWidget.insertItem
【发布时间】:2015-02-08 16:56:17
【问题描述】:

我有一个相当简单的 PyQt 问题。 (Python 3.4、PyQt 4.11.3、Qt 4.8.5)我使用 Qt Designer (Ui_Dialog) 构建了一个非常简单的对话框。这个对象有一个 QPushButton、一个 QLineEdit 和一个 QListWidget。我编写了另一个继承自 Ui_Dialog 的对象,并设置了来自 QLineEdit 的 returnPressed 信号,该信号应该向 QListWidget 添加一些文本。不幸的是,这不起作用。

这是我的代码:

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 之外),我将不胜感激。谢谢

【问题讨论】:

    标签: python pyqt signals-slots qt-designer qlistwidget


    【解决方案1】:

    您的对话框中只有一个按钮,因此它将变为auto-default。这意味着每当您在对话框中按 Enter 键时,该按钮都会收到一个按下事件,即使它当前没有键盘焦点。

    所以项目确实被添加到列表小部件 - 只是它立即被自动默认按钮清除。

    要解决这个问题,请像这样重置自动默认值:

        self.pushButton.setAutoDefault(False)
    

    (注意:您也可以在 Qt Designer 中更改此属性)。

    【讨论】:

    • 感谢您提供的非常有用的提示。我正用这个把头撞在墙上。我很高兴它实际上正在按照我的想法做。以后我必须注意这些默认行为。
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多