PyQt从弹出窗口中获取结果

时间:2014-05-12 11:39:51

标签: windows popup pyqt

我想使用此类

在pyqt界面中打开一个弹出窗口
class MyPopup(QWidget):
  def __init__(self):
    QWidget.__init__(self)
    self.initUI()
    self.res=0

  def initUI(self):
        self.btn = QtGui.QPushButton('Continue', self)
        self.btn.move(20, 160)
        self.btn.clicked.connect(self.showDialogcontinue)
        self.btn = QtGui.QPushButton('Quit', self)
        self.btn.move(180,160)
        self.btn.clicked.connect(self.showDialogstop)
        self.setGeometry(600, 600, 290, 150)
        self.setWindowTitle('EUT Setup')
        self.show()

  def showDialogcontinue(self):
    self.close()
    self.res=1

  def showDialogstop(self):
    self.close()
    self.res=0

所以当我使用它时,按下按钮方法

    self.w = MyPopup()
    self.w.setGeometry(QRect(100, 100, 400, 200))
    self.w.show()
    if self.w.res==1:
        print "start"
        self.__thread.start()
    else:
        print "stop"

我无法获得结果,或者没有mythread ___thread。 请问有什么不对?你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

问题是显示窗口小部件不会阻止代码的执行。因此,在点击窗口小部件中的任何按钮之前很久就会进行if检查。

要解决此问题,您可以将父类更改为QDialog,并使用exec_()进行显示,它将一直阻止,直到对话框关闭。

self.res=0之前设置self.initUI(),因为在关闭对话框后会调用self.initUI()之后的任何内容。这会将res重置为0。

class MyPopup(QtGui.QDialog):
  def __init__(self, parent=None):
    super(MyPopup, self).__init__(parent)
    self.res=0
    self.initUI()

  def initUI(self):
        self.btn = QtGui.QPushButton('Continue', self)
        self.btn.move(20, 160)
        self.btn.clicked.connect(self.showDialogcontinue)
        self.btn = QtGui.QPushButton('Quit', self)
        self.btn.move(180,160)
        self.btn.clicked.connect(self.showDialogstop)
        self.setGeometry(600, 600, 290, 150)
        self.setWindowTitle('EUT Setup')
        self.exec_()

  def showDialogcontinue(self):
    self.res=1
    self.close()

  def showDialogstop(self):
    self.res=0
    self.close()

如果您只需要从对话框返回一个真正的\ false值。使用QDialog的accept \ reject函数可以更轻松地完成。

class MyPopup(QtGui.QDialog):
  def __init__(self):
    super(MyPopup, self).__init__()
    self.initUI()

  def initUI(self):
        self.btn = QtGui.QPushButton('Continue', self)
        self.btn.move(20, 160)
        self.btn.clicked.connect(self.accept)
        self.btn = QtGui.QPushButton('Quit', self)
        self.btn.move(180,160)
        self.btn.clicked.connect(self.reject)
        self.setGeometry(600, 600, 290, 150)
        self.setWindowTitle('EUT Setup')

w = MyPopup()
if w.exec_():
    print("Start thread")
else:
    print("Stop")