等待用户操作继续执行代码

2024-10-01 15:38:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

from PySide.QtGui import *

class window_A(QWidget):
    def __init__(self):
        super(window_A, self).__init__()
        layout = QVBoxLayout() # Create horisontal layout
        self.setLayout(layout) # Use horisontal layout to place widgets in window
        self.resize(300,50) # resize window

        self.button_A = QPushButton('PRESS')
        self.button_A.clicked.connect(self.func)
        self.button_A.clicked.connect(self.close)
        layout.addWidget(self.button_A)

    def func(self):
        print 'A'


app = QApplication([])

print 'BEFORE'
widget = window_A()
widget.show()
print 'AFTER'

app.exec_()

在显示窗口之后,如何保持代码的执行,直到用户按下按钮?例如,仅在按下按钮并关闭窗口后打印“AFTER”。你知道吗


Tags: selfappinitdefconnectbuttonwidgetwindow
2条回答

在这种情况下,为了防止同步执行继续,可以使用QEventLoop,并且为了通知窗口是否关闭,可以实现closeEvent中发出的信号:

from PySide import QtCore, QtGui


class Window_A(QtGui.QWidget):
    closed = QtCore.Signal()

    def __init__(self):
        super(Window_A, self).__init__()
        layout = QtGui.QVBoxLayout(self)
        self.resize(300, 50)

        self.button_A = QtGui.QPushButton("PRESS")
        self.button_A.clicked.connect(self.func)
        self.button_A.clicked.connect(self.close)
        layout.addWidget(self.button_A)

    @QtCore.Slot()
    def func(self):
        print("A")

    def closeEvent(self, event):
        super(Window_A, self).closeEvent(event)
        self.closed.emit()


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    print("BEFORE")
    widget = Window_A()
    widget.show()
    loop = QtCore.QEventLoop()
    widget.closed.connect(loop.quit)
    loop.exec_()
    print("AFTER")

我有办法了!需要将QWidget更改为QDialog,将show更改为exec_()

from PySide.QtGui import *

class window_A(QDialog):
    def __init__(self):
        super(window_A, self).__init__()
        layout = QVBoxLayout() # Create horisontal layout
        self.setLayout(layout) # Use horisontal layout to place widgets in window
        self.resize(300,50) # resize window

        self.button_A = QPushButton('PRESS')
        self.button_A.clicked.connect(self.func)
        self.button_A.clicked.connect(self.close)
        layout.addWidget(self.button_A)

    def func(self):
        print 'A'
        self.done(256)


app = QApplication([])
print 'BEFORE'
widget = window_A()
if widget.exec_() == 256:
    print 'AFTER'
app.exec_()

相关问题 更多 >

    热门问题