2017-08-04 118 views
2

在我的主應用程序中,我打開一個QDialog,並從此QDialog中打開/顯示另一個QDialog。與其重點展示第二個對話框不同,它出現在我的主應用程序後面,並且被阻止/禁用,我不能使用它。各形式是在一個單獨的文件:另一個QDialog的QDialog未顯示

在mainform.py:

form_gui = uic.loadUiType("mainform.ui")[0] # Load the UI 
class MainForm(QtGui.QMainWindow, form_gui): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.btnOpenForm1.clicked.connect(self.showFirstDialog) 
    ... 
    def showFirstDialog(self): 
     browser1 = UI_Form1(self) 
     browser1.setWindowTitle('UI_Form1') 
     browser1.show() 
    ... 
if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    myapp = MVSGUI() 
    myapp.show() 
    sys.exit(app.exec_()) 
在文件UI_Form1.py

form_gui = uic.loadUiType("uiform1.ui")[0] # Load the UI 
class UI_Form1(QtGui.QDialog, form_gui): 
    def __init__(self, parent): 
     super(UI_Form1, self).__init__(parent) 
     self.btnOpenForm2.clicked.connect(self.showSecondDialog) 
    ... 
    def showSecondDialog(self): 
     browser2 = UI_Form2(self) 
     browser2.setWindowTitle('UI_Form2') 
     browser2.show() 
    ... 
在文件UI_Form2.py

form_gui = uic.loadUiType("uiform2.ui")[0] # Load the UI 
class UI_Form2(QtGui.QDialog, form_gui): 
    def __init__(self, parent): 
     super(UI_Form2, self).__init__(parent) 
    ... 

可能很容易猜出什麼是錯,但我找不到如何解決這個問題。

+0

用您的代碼重現並不容易。你能給我們最簡單的腳本來做'python script.py'並看看你的問題嗎? –

+0

確保兩個對話框都不是模態 – Mailerdaimon

+0

@ Tiger-222我編輯了顯示按鈕聲明的代碼。因此,mainform.py創建主GUI。它包含一個打開第一個對話框的按鈕。第一個對話框位於文件UI_Form1.py中,它包含一個打開第二個對話框的按鈕。所以,這個第二個對話框應該出現在第一個對話框的前面,但是它卻在主窗口後面被禁用。希望這會有所幫助 –

回答

2

QDialogs可以在模態和無模式下創建。如果您想同時使用多個,請務必使它們無模式化。

你可以看看QDialog的documentation,看看你如何改變模態模式。 您還可以使用modality enum來更改模態窗口的行爲。

還要確保使用正確的工具,正確的任務時,documentation狀態:

一個對話框窗口是主要用於短期任務 和簡短通訊與用戶的頂級窗口。