我想使用此类
在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。 请问有什么不对?你能帮忙吗?
答案 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")