python - PyQT:如何打开新窗口

标签 python pyqt pyqt4

首先,类似的问题已经被回答过,但我需要一些帮助。

我有一个包含一个按钮(Class First)的窗口,我想在按下时出现第二个空白窗口(Class Second)

我摆弄了从这个问题复制的代码:PyQT on click open new window ,我写了这段代码:

# -*- coding: utf-8 -*-

from PyQt4 import QtGui, QtCore
import sys
import design1, design2

class Second(QtGui.QMainWindow, design2.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Second, self).__init__(parent)
        self.setupUi(self)

class First(QtGui.QMainWindow, design1.Ui_MainWindow):
    def __init__(self, parent=None):
        super(First, self).__init__(parent)
        self.setupUi(self)

        self.pushButton.clicked.connect(self.on_pushButton_clicked)
        self.dialog = Second(self)

    def on_pushButton_clicked(self):
        self.dialog.exec_()

def main():
    app = QtGui.QApplication(sys.argv)
    main = First()
    main.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()  

但是在按下时,出现此错误消息:

AttributeError: 'Second' object has no attribute 'exec_'

(design1和design2源自Qt设计器。)

任何想法将不胜感激。

最佳答案

这里我使用 show 方法。

这是一个工作示例(源自您的示例):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from PyQt4 import QtGui, QtCore
import sys
 
 
class Second(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Second, self).__init__(parent)
 
 
class First(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(First, self).__init__(parent)
        self.pushButton = QtGui.QPushButton("click me")
 
        self.setCentralWidget(self.pushButton)
 
        self.pushButton.clicked.connect(self.on_pushButton_clicked)
        self.dialog = Second(self)
 
    def on_pushButton_clicked(self):
        self.dialog.show()
 
 
def main():
    app = QtGui.QApplication(sys.argv)
    main = First()
    main.show()
    sys.exit(app.exec_())
 
if __name__ == '__main__':
    main()

如果每次单击按钮时都需要一个新窗口,则可以更改在 on_pushButton_clicked 方法中创建对话框的代码,如下所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from PyQt4 import QtGui, QtCore
import sys
 
 
class Second(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Second, self).__init__(parent)
 
 
class First(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(First, self).__init__(parent)
        self.pushButton = QtGui.QPushButton("click me")
 
        self.setCentralWidget(self.pushButton)
 
        self.pushButton.clicked.connect(self.on_pushButton_clicked)
        self.dialogs = list()
 
    def on_pushButton_clicked(self):
        dialog = Second(self)
        self.dialogs.append(dialog)
        dialog.show()
 
 
def main():
    app = QtGui.QApplication(sys.argv)
    main = First()
    main.show()
    sys.exit(app.exec_())
 
if __name__ == '__main__':
    main()

关于python - PyQT:如何打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53066574/

相关文章:

python - 在 QTableWidget 中获取选定行数 - PyQt

python - PyQT:如何打开新窗口

python - 如何在 QTableView 列中添加 QTreeView

python - 使用 pip 安装特定的软件包版本

python - selenium 脚本在 python 上完成后如何保持 chrome 浏览器窗口打开以便重新使用

qt - 如何在pyqt中按名称查找对象?

c++ - 谁为 Qt 开发语言绑定(bind)?

Python/Tracing - 如何从跟踪器中停止函数的执行(从中返回)

python - python中大量的阶乘

python - Pyqt4:通过文件浏览小部件编辑 QLineEdit 文本并将其作为参数发送