2012-07-24 34 views
3

我試圖讓一個小例子,對於涉及QTreeView則通過QT設計師設計的PyQt的應用程序的工作小例子,QTreeView則用於PyQt的和Qt設計

1)我就可以開始應用這種方式,但如果我推動butten,沒有顯示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文件的更簡潔的方法,直接對該文件的MainWindow進行子類化? 3)例如,在* .ui文件創建的窗口的子類中使用add_item方法會更好,我們應該使用翻譯*的中間步驟, .ui文件到一個* .py文件?

+0

問題2和3應當分開出的新問題。但我很確定[this](http://stackoverflow.com/questions/17742673)是你的答案。具體來說就是loadUi函數。 – jkerian 2013-10-21 10:56:29

回答

2

你只是忘了在你的QTreeView上設置模型。現在樹視圖沒有模型,因此它永遠不會看到數據更新:

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

另外,作爲一個建議,可以救自己一些打字和使用是更Python和不新式的信號/槽連接讓你輸入簽名:

self.ui.pushButton_NeuesMoebel.clicked.connect(self.add_item) 
+0

感謝修正和tipp,它現在工作 – thafritz 2012-07-26 13:19:15

0

我剛剛遇到這個問題,我真的很高興我做到了。它讓我使用uic模塊進行研究,而我一直忽略這個模塊。在我使用pyqt的所有年份中,我總是從設計器.ui文件生成一個.py文件,然後將生成的文件作爲模塊導入。

使用uic代替直接加載.ui文件可以節省一個步驟並簡化一些操作。這很容易做到。

所以,是的,在回答問題2還有一個更簡單的方法比調用用戶界面的東西:

from PyQt4 import uic, QtGui, QtCore 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self,parent) 
     uic.loadUi('main_window.ui',self) 
....