2012-12-05 59 views
1

我喜歡使用PyQt的的loadUi()方法在QtDesigner接口文件加載,因爲我經常改變UI文件的想法,不想不斷地將其轉換爲py文件。難以進入小部件

不過,我一直有困難,瞭解如何訪問不同的部件和觀點在我的UI文件。下面的說明我如何加載在用戶界面:

class MyClass(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     super().__init__(parent) 
     ui = uic.loadUi('MyUserInterface.ui',self) 


if __name__ == '__main__': 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    mainapplication = MyClass() 
    mainapplication.show() 
    app.exec_() 

它顯示正常,但我期待,我將能夠在東西線沿線的訪問GUI的元素...

ui.sampleButton.makeDraggable() 

我的問題是,我怎麼能訪問我的GUI中的各種元素?

編輯1:我也有試過不分配uic.load呼叫的用戶界面。如下所示訪問時,我可以通過使用Ui_MainWindow訪問一些屬性。然而,它拋出一個錯誤

if __name__ == '__main__': 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    mainapplication = MyClass() 
    mainapplication.Ui_MainWindow.graphicsView.acceptDrops(True) 
    mainapplication.show() 
    app.exec_() 

錯誤我得到的是...

Traceback (most recent call last): File "C:\Users\Me\workspaces\com.samplesoftware.software\src\SoftwareView\MyClass.py", line 17, in <module> 
    mainapplication.Ui_MainWindow.graphicsView.acceptDrops(True) 
    AttributeError: 'MyClass' object has no attribute 'Ui_MainWindow' 

任何想法?

回答

0

你並不需要將其轉換爲.py文件,但你肯定有他們的名字來訪問它們,否則你需要知道什麼sampleButton被稱爲在UI文件。

你可以簡單地重命名sampleButton到my_btn的和訪問它..

+0

我在ui文件中命名了按鈕sampleButton。 SampleButton只是我爲例子給出的一個名稱。 – Flaminator

0

loadUi功能需要一個UI文件路徑作爲第一個參數,和基實例作爲第二個參數。

的鹼實例應該是相同的Qt類如在UI頂層窗口小部件。這是因爲loadUi會將所有UI插入到基本實例中,並且可能需要調用其中的一些方法。 UI中定義的所有子部件將作爲基本實例的屬性結束。

所以,你應該叫loadUi像這樣在你__init__

class MyClass(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     super(MyClass, self).__init__(parent) 
     uic.loadUi('MyUserInterface.ui', self) 

然後你應該能夠訪問graphicsView這樣的:

 self.graphicsView.setAcceptDrops(True) 
+0

謝謝,我實際上也試過這個,但發現我仍然有同樣的問題。我自己唯一可用的選項是QtGui,QtCore和Ui_MainWindow。我已更新我的問題了解其他信息。 – Flaminator

+0

@Flamminator。對不起 - 我只是複製並粘貼示例代碼而沒有正確檢查。看起來你需要修理你的「超級」電話(見我更新的答案)。那麼你應該可以做'mainapplication.graphicsView.setAcceptDrops(True)'。 – ekhumoro

+0

感謝Ekhumoro的迴應。實際上,我發現原因與我試圖在MainWindow存在之前調用相關...我發佈了一個答案,謝謝你的幫助。 – Flaminator

0

我找到了原因,是因爲我的原因在運行app.exec_()之前試圖調用Ui_MainWindow。在將Ui_MainWindow調用移動到結尾後,它確實起作用。我猜測,事後看來確實有道理,MainWindow需要在其屬性可以改變之前存在。

+0

起初我以爲我已經糾正了這個問題,但後來我意識到,在app.exec_()調用之後放置調用只是延遲了Ui_MainWindow的調用。程序關閉後,我得到相同的錯誤。仍然不確定它的來源是什麼... – Flaminator