我试图为qt设计器设计的应用程序获取一个最小的示例,其中pyqt包含一个QTreeView
1)我可以用这种方式启动应用程序,但是如果我按下按钮,TreeView小部件中没有显示任何条目,我没有收到任何错误消息,布局看起来很好,是否有某种更新方法?
如果您回答,请具体说明,因为我还是qt的初学者,而且大部分文档都是用c++示例编写的,而且我对基本c和python只有一些经验

from PyQt4 import uic, QtGui, QtCore


(Ui_MainWindow, QMainWindow) = uic.loadUiType('main_window.ui')


class MainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.model = QtGui.QStandardItemModel()
        self.connect(self.ui.pushButton_NeuesMoebel, QtCore.SIGNAL('clicked()'), self.add_item)

    def add_item(self):
        t = self.ui.lineEdit_Moebel.text()
        if len(t) > 0:
            item = QtGui.QStandardItem(t)
            self.model.appendRow(item)
            self.ui.lineEdit_Moebel.clear()
        else:
            self.ui.statusBar.showMessage('error: no text in Moebel')


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

2)另外,有没有比这更干净的方法来直接使用*.ui文件,来排序该文件的主窗口的子类?用户界面看起来有点混乱
3)例如,在由*.ui文件创建的窗口子类中使用add_item方法会更好,我们是否应该使用将*.ui文件转换为*.py文件的中间步骤?

最佳答案

你忘了在QTreeView上设置模型。现在树视图没有模型,因此它永远看不到数据更新:

def __init__(self, parent=None):
    ....
    self.ui.treeView.setModel(self.model)

另外,建议您节省一些打字时间,使用新型的信号/插槽连接,这种连接更像蟒蛇,不会让您键入签名:
self.ui.pushButton_NeuesMoebel.clicked.connect(self.add_item)

08-27 23:14
查看更多