2011-11-01 20 views
3

這是很難描述我想在這裏做,所以這裏就是我想:彈出,非模式,在線對話框中PyQt的

- 點擊一個按鈕,「彈出」的對話框。

- 但是,該對話框應該是非模態的。

- 我也喜歡它與父應用程序「鎖定」,所以如果我移動它,它也會隨之而來。

看起來我似乎或多或少都在試圖描述一個內聯彈出窗口,但我不確定這是它的名稱,還是我應該如何解決這個問題。所以,PyQt大師,你會如何做出這樣的事情?提前致謝。

+1

是否必須是對話框?您可以在主窗口上使用一個按鈕顯示/隱藏小部件。在某些GUI中,有點像「顯示更多」內容。 – Avaris

+0

我想這可能需要一些幻想,但我懷疑這可能會做我最終想要的。 – Cryptite

+0

@ ekhumoro的回答解決了除「鎖定」外的所有問題。我從來沒有見過這樣的事情實施,但我想你可以,如果你想,鉤到孩子的移動事件,並移動父母與它......雖然這將是奇怪的。有沒有一個你見過的通用應用程序,你試圖效仿? –

回答

3

要獲得無模式對話框,請使用show()而不是exec_()將其打開。

爲確保對話框「與父應用程序鎖定」,請在對話框的構造函數中設置父窗口。

from PyQt4 import QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     button = QtGui.QPushButton('Open Dialog', self) 
     button.clicked.connect(self.handleOpenDialog) 
     self.resize(300, 200) 
     self._dialog = None 

    def handleOpenDialog(self): 
     if self._dialog is None: 
      self._dialog = QtGui.QDialog(self) 
      self._dialog.resize(200, 100) 
     self._dialog.show() 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    win = Window() 
    win.show() 
    sys.exit(app.exec_())