2012-01-31 204 views
2

我需要知道如何在用户单击按钮时弹出一个对话框。在Python中显示弹出窗口(PyQt4)

我对Python和PyQt/QtDesigner都比较陌生。我只用了他们一个月左右,但我认为我有一个很好的把握。

下面是我所拥有的:主对话框(这是应用程序的主要部分),我在QtDesigner中设计的。我使用pyuic4easy将.ui转换为.py。

下面是我想要做的:在QtDesigner中设计一个新的对话框,并以某种方式使用户在第一个(主)对话框中单击按钮时弹出。

下面是我的主对话框代码:

import sys 
from PyQt4.QtCore import * 
from loginScreen import * 


class MyForm(QtGui.QDialog): 

    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 
     QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.popup)  
     ... 

     ... Some functions ... 

    def popup(self): 
     #Pop-up the new dialog 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp= MyForm() 
    myapp.show() 
    sys.exit(app.exec_()) 

因此,大家可以看到,我已经连接的第一个按钮到一个名为“弹出式”的方法,这需要填写的代码,使我的第二个窗口弹出。我如何去做这件事?记住我已经在QtDesigner中设计了我的第二个对话框,而且我不需要创建一个新的对话框。

感谢您的帮助!

回答

8

因此,大家可以看到,我已经连接的第一个按钮的方法命名 “弹出”,这需要用代码,使我的第二 窗口弹出来填充。我如何去做这件事?

与您为主窗口(MyForm)做的几乎一样。像往常一样,你为第二个对话框的QtDesigner代码编写了一个包装类(就像你用MyForm所做的那样)。我们称之为MyPopupDialog。然后在popup方法中,创建一个实例,然后根据您想要的是模态对话框还是非模态对话框,使用exec_()show()来显示您的实例。 (如果你不熟悉莫代尔/无模式的概念,你可能是指documentation.

所以整体的事情可能是这样的(一对夫妇的修改):

# Necessary imports 

class MyPopupDialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     # Regular init stuff... 
     # and other things you might want 


class MyForm(QtGui.QDialog): 
    def __init__(self, parent=None): 
     # Here, you should call the inherited class' init, which is QDialog 
     QtGui.QDialog.__init__(self, parent) 

     # Usual setup stuff 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

     # Use new style signal/slots 
     self.ui.pushButton.clicked.connect(self.popup)  

     # Other things... 

    def popup(self): 
     self.dialog = MyPopupDialog() 

     # For Modal dialogs 
     self.dialog.exec_() 

     # Or for modeless dialogs 
     # self.dialog.show() 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp= MyForm() 
    myapp.show() 
    sys.exit(app.exec_()) 
+0

你忘了保持当你show()'对话框时参考。 – ekhumoro 2012-01-31 17:31:51

+0

啊,对。固定。谢谢 – Avaris 2012-01-31 18:13:30

+0

谢谢Avaris! 我能够做出弹出式显示,但它与弹出对话框的内容相同。我如何解决这个问题?另外,我可以设计PyQt中新弹出的窗口,并让我的代码弹出一个,而不是? 这是我的代码看起来,新的对话框: '类MyPopUp(QtGui.QDialog): 高清__init __(自我,父母=无): QtGui.QDialog .__的init __(自我,父母) 自我。 ui = Ui_Dialog() self.ui.setupUi(self)' – user1179452 2012-02-07 21:53:01