2013-07-02 37 views
0

我需要通過主窗口(也在QtDesigned,因此是單獨的文件)上的按鈕槽調用窗體(用QtDesigner設計自定義對話框)。下面是相關代碼:似乎無法從mainWindow調用自定義對話框。 PySide

def __init__(self, parent = None): 
    super(MainWindow, self).__init__(parent) 

    self.setupUi(self) 

    self.btn.clicked.connect(self.my_func) 


def my_func(self): 
    form = Form_UI.Custom_Dialog() 

    if form.exec_(): 
     print "successfully opened" 

如何過我得到以下錯誤:

Traceback (most recent call last): 
File "F:\myPath\code.py", line 27, in my_func 
if form.exec_(): 
AttributeError: 'Custom_Dialog' object has no attribute 'exec_' 

我不明白,因爲下面的代碼(使用內置的對話框)工作得很好:

def __init__(self, parent = None): 
    super(MainWindow, self).__init__(parent) 

    self.setupUi(self) 

    self.btn.clicked.connect(self.my_func) 


def my_func(self): 
    form = QtGui.QDialog() 

    if form.exec_(): 
     print "successfully opened" 

任何幫助,將不勝感激。提前致謝。

回答

1

pyuic4生成的類不是從QDialog派生的,所以如果您沒有像爲主窗口那樣爲該UI文件編寫python類,則需要創建一個QDialog對象和一個ui類對象:

def my_func(self): 
    form = QtGui.QDialog() 
    ui_form = Form_UI.Custom_Dialog() 
    ui_form.setupUi(form)  

    if form.exec_(): 
     print "successfully opened" 
+0

太棒了,我真的很感激它。謝謝。 – Ryan

+0

但是,我不得不問,更好的做法(或慣例),在ui文件中導出它還是如上所述? – Ryan

+0

@Ryan由於您不能編輯生成的文件,因爲再次調用pyuic4時會發生任何更改,我假設您的意思是「......編寫一個可以從'QDialog'和'Custom_Dialog'派生的類,或者設置爲以上」。除了普通[「單一責任規則」](http://en.wikipedia.org/wiki/Single_responsibility_principle)之外,沒有PyQt慣例可以在這兩種方法之間進行選擇,因此,基本上,如果您不需要添加任何邏輯到生成的對話框(相對複雜的用戶交互或驗證...),上面的代碼應該足夠了。 – alexisdm