QMessageBox 的 buttonClicked 信号不起作用
buttonClicked signal of QMessageBox isn't working
我想使用 Qmessagebox
来显示有关 运行 计算的一些信息,并在我单击“确定”按钮时作为停止功能。
但是,当我使用信号 buttonClicked
时,什么也没有发生,并且永远不会调用与其连接的 hte 函数
这里有一段代码可以说明我的问题:
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class SenderObject(QObject):
something_happened = pyqtSignal( )
class myfunc():
updateTime = SenderObject()
def __init__(self):
self.i = 0
self.stop = True
def run(self):
while self.stop :
self.i+=1
if self.i%100 == 0:
self.updateTime.something_happened.emit()
print('infinit loop',self.i)
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.setFixedWidth(200)
self.setFixedHeight(200)
self.wid = QWidget()
self.setCentralWidget(self.wid)
self.groups = QHBoxLayout() ####
self.Run = QPushButton('Run')
self.groups.addWidget(self.Run)
self.wid.setLayout(self.groups)
self.Run.clicked.connect(self.run)
self.myfunc = myfunc()
self.myfunc.updateTime.something_happened.connect(self.updateTime)
def run(self):
self.msg = QMessageBox()
self.msg.setText('Click Ok to stop the loop')
self.msg.setWindowTitle(" ")
self.msg.setModal(False)
self.msg.show()
self.myfunc.run()
self.msg.buttonClicked.connect(self.Okpressed)
def Okpressed(self):
self.myfunc.stop = False
@pyqtSlot( )
def updateTime(self ):
self.msg.setText('Click Ok to stop the loop\ni = '+str(self.myfunc.i))
self.parent.processEvents()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.setWindowTitle('window')
ex.show()
sys.exit(app.exec_( ))
所以self.msg.buttonClicked.connect(self.Okpressed)
行永远不会调用函数Okpressed
。因此,myfunc.run
永远不会停止。
有人可以帮忙吗?
写入
self.msg.buttonClicked.connect(self.Okpressed)
之前
self.myfunc.run()
如果在订阅点击事件前调用运行函数,curse会陷入无限while循环。所以您的点击事件从未订阅。
先订阅点击事件再调用"myfunc"
的"run"函数
是的,永远不要这样做 -
from PyQt4.QtGui import *
from PyQt4.QtCore import *
它的编程实践非常糟糕。你可以这样写
from PyQt4 import QtGui
并在代码中使用
QtGui.QMessagebox
我想使用 Qmessagebox
来显示有关 运行 计算的一些信息,并在我单击“确定”按钮时作为停止功能。
但是,当我使用信号 buttonClicked
时,什么也没有发生,并且永远不会调用与其连接的 hte 函数
这里有一段代码可以说明我的问题:
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class SenderObject(QObject):
something_happened = pyqtSignal( )
class myfunc():
updateTime = SenderObject()
def __init__(self):
self.i = 0
self.stop = True
def run(self):
while self.stop :
self.i+=1
if self.i%100 == 0:
self.updateTime.something_happened.emit()
print('infinit loop',self.i)
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.setFixedWidth(200)
self.setFixedHeight(200)
self.wid = QWidget()
self.setCentralWidget(self.wid)
self.groups = QHBoxLayout() ####
self.Run = QPushButton('Run')
self.groups.addWidget(self.Run)
self.wid.setLayout(self.groups)
self.Run.clicked.connect(self.run)
self.myfunc = myfunc()
self.myfunc.updateTime.something_happened.connect(self.updateTime)
def run(self):
self.msg = QMessageBox()
self.msg.setText('Click Ok to stop the loop')
self.msg.setWindowTitle(" ")
self.msg.setModal(False)
self.msg.show()
self.myfunc.run()
self.msg.buttonClicked.connect(self.Okpressed)
def Okpressed(self):
self.myfunc.stop = False
@pyqtSlot( )
def updateTime(self ):
self.msg.setText('Click Ok to stop the loop\ni = '+str(self.myfunc.i))
self.parent.processEvents()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.setWindowTitle('window')
ex.show()
sys.exit(app.exec_( ))
所以self.msg.buttonClicked.connect(self.Okpressed)
行永远不会调用函数Okpressed
。因此,myfunc.run
永远不会停止。
有人可以帮忙吗?
写入
self.msg.buttonClicked.connect(self.Okpressed)
之前
self.myfunc.run()
如果在订阅点击事件前调用运行函数,curse会陷入无限while循环。所以您的点击事件从未订阅。
先订阅点击事件再调用"myfunc"
的"run"函数是的,永远不要这样做 -
from PyQt4.QtGui import *
from PyQt4.QtCore import *
它的编程实践非常糟糕。你可以这样写
from PyQt4 import QtGui
并在代码中使用
QtGui.QMessagebox