首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyQT:在第一个窗口之前退出/完成第二个窗口

PyQT:在第一个窗口之前退出/完成第二个窗口
EN

Stack Overflow用户
提问于 2019-02-26 16:43:41
回答 1查看 88关注 0票数 1

我有以下代码:

代码语言:javascript
复制
from PyQt4 import QtGui
import sys


class Second(QtGui.QWidget):

    def __init__(self, parent=None):
        super(Second, self).__init__(parent)

        self.grid = QtGui.QGridLayout(self)
        self.setGeometry(650,400,400,200)
        self.widget = QtGui.QWidget()


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

        self.grid = QtGui.QGridLayout(self)
        self.setGeometry(350, 200, 1000, 700)
        self.widget = QtGui.QWidget()

        Button1 = QtGui.QPushButton('...', self)
        Button1.clicked.connect(self.on_pushButton_clicked)
        self.grid.addWidget(Button1, 0, 0, 1, 1)


    def on_pushButton_clicked(self):
        self.Second = Second()
        self.Second.setWindowTitle('Window')
        self.Second.show()


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

if __name__ == '__main__':
    main()

当我单击该按钮时,我希望能够在第二个窗口中完成我的操作,然后再继续第一个窗口。现在,我可以退出我的第一个窗口和第二个窗口仍然打开。如何保持在第二个窗口,但保持第一个窗口不可选?

EN

Stack Overflow用户

回答已采纳

发布于 2019-02-26 17:22:00

有两种可能的解决办法:

秒必须从QDialog**,继承,将其作为父窗口传递给第一个窗口,并使用** exec_() 而不是

代码语言:javascript
复制
class Second(QtGui.QDialog):
    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.setGeometry(350, 200, 1000, 700)
        self.widget = QtGui.QWidget()
        self.setCentralWidget(self.widget)
        grid = QtGui.QGridLayout(self.widget)
        Button1 = QtGui.QPushButton('...', self)
        Button1.clicked.connect(self.on_pushButton_clicked)
        grid.addWidget(Button1, 0, 0, 1, 1)

    @QtCore.pyqtSlot()
    def on_pushButton_clicked(self):
        self.Second = Second(self)
        self.Second.setWindowTitle('Window')
        self.Second.exec_()

windowModality Qt::WindowModal**,更改为,激活标志** Qt::Dialog ,并将第一个窗口作为父窗口传递。

代码语言:javascript
复制
class Second(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Second, self).__init__(parent)
        self.setWindowModality(QtCore.Qt.WindowModal)
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.Dialog)

class First(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(First, self).__init__(parent)        
        self.setGeometry(350, 200, 1000, 700)
        self.widget = QtGui.QWidget()
        self.setCentralWidget(self.widget)
        grid = QtGui.QGridLayout(self.widget)
        Button1 = QtGui.QPushButton('...', self)
        Button1.clicked.connect(self.on_pushButton_clicked)
        grid.addWidget(Button1, 0, 0, 1, 1)

    @QtCore.pyqtSlot()
    def on_pushButton_clicked(self):
        self.Second = Second(self)
        self.Second.setWindowTitle('Window')
        self.Second.show()
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54890278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档