在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_())
你可以看到,我把第一个按钮连接到了一个叫'popup'的方法,但这个方法需要填入代码才能让我的第二个窗口弹出来。我该怎么做呢?记住,我已经在QtDesigner里设计好了第二个对话框,不需要再创建一个新的。
谢谢大家的帮助!
1 个回答
10
你可以看到,我把第一个按钮连接到了一个叫做 'popup' 的方法,这个方法需要写一些代码来让我的第二个窗口弹出来。我该怎么做呢?
其实和你为主窗口(MyForm
)做的差不多。
像往常一样,你需要为第二个对话框的 QtDesigner 代码写一个包装类(就像你为 MyForm
做的那样)。我们可以把它叫做 MyPopupDialog
。然后在你的 popup
方法里,你创建这个类的一个实例,然后用 exec_()
或 show()
来显示这个实例,具体用哪个取决于你想要的是模态对话框还是非模态对话框。(如果你对模态和非模态的概念不太了解,可以参考一下 文档。)
所以整体的代码可能看起来像这样(稍微修改了一下):
# 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_())