【问题标题】:Displaying pop-up windows in Python (PyQt4)在 Python (PyQt4) 中显示弹出窗口
【发布时间】:2012-02-22 20:33:22
【问题描述】:

我需要知道如何在用户单击按钮时弹出对话框。

我对 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_())

如您所见,我已将第一个按钮连接到一个名为“popup”的方法,该方法需要填写代码以使我的第二个窗口弹出。我该怎么做呢?请记住,我已经在 QtDesigner 中设计了第二个对话框,我不需要创建新的。

感谢大家的帮助!

【问题讨论】:

    标签: python dialog pyqt qt-designer


    【解决方案1】:

    如您所见,我已将第一个按钮连接到名为 'popup',需要填写代码才能使我的第二个 弹出窗口。我该怎么做?

    与主窗口 (MyForm) 的操作方式几乎相同。

    像往常一样,您为第二个对话框的 QtDesigner 代码编写一个包装类(就像您对 MyForm 所做的那样)。我们称之为MyPopupDialog。然后在您的popup 方法中,您创建一个实例,然后使用exec_()show() 显示您的实例,具体取决于您需要模态对话框还是非模态对话框。 (如果对 Modal/Modeless 概念不熟悉,可以参考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_())
    

    【讨论】:

    • 感谢阿瓦里斯!我能够进行弹出显示,但它与弹出的对话框具有相同的内容。我该如何解决?另外,我可以在 PyQt 中设计新弹出的窗口,并让我的代码弹出那个窗口吗?这是我的代码的样子,对于新对话框:class MyPopUp(QtGui.QDialog): def __init__(self, parent = None): QtGui.QDialog.__init__(self, parent) self.ui = Ui_Dialog() self.ui.setupUi(self)
    • 啊,没关系。我终于明白了一切是如何运作的,并回答了我在 cmets 中发布的我自己的问题。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多