Signals PyQt5在类之间发送信号?
我有两个类(A、B、C、D),其中一个是包含progressbar的GUI类(A)。 那么,有可能从B、C、D类向A类发送进度信号吗 在伪代码中,它类似于:Signals PyQt5在类之间发送信号?,signals,pyqt5,Signals,Pyqt5,我有两个类(A、B、C、D),其中一个是包含progressbar的GUI类(A)。 那么,有可能从B、C、D类向A类发送进度信号吗 在伪代码中,它类似于: from a import A from PyQt5.Core import pyqtSignal class B(QObject): ... self.gui = A() progress = pyqtSignal(int) def connect_and_send(self, value):
from a import A
from PyQt5.Core import pyqtSignal
class B(QObject):
...
self.gui = A()
progress = pyqtSignal(int)
def connect_and_send(self, value):
self.progress.connect(self.gui.progressBar)
self.progress.emit(value)
但也许还有更好的办法,那就是我的混乱方法?据我看,你的基本想法是对的。:)几乎没有什么事情可以改进 首先,调用
connect\u和\u send(…)
将导致在每次调用函数时创建信号插槽连接。所以最好在别处建立连接
其次,您使用了新型的信号插槽,这对您很好,但连接是错误的。您有一行self.progress.connect(self.gui.progressBar)
。这将导致progressbar对象本身按如下方式调用self.gui.progressbar()
,并触发TypeError
:
Traceback (most recent call last):
File "...", line ..., in ...
TypeError: 'QProgressBar' object is not callable
将self.progress.connect(self.gui.progressBar)
更改为self.progress.connect(self.gui.progressBar.setValue)
。此调用将产生您想要的self.gui.progressBar.setValue()
因此,您的最终代码可以更改为如下内容:
from a import A
from PyQt5.Core import pyqtSignal
class B( QObject ) :
...
progress = pyqtSignal(int)
...
def prepareGui( self ) :
self.gui = A()
self.gui.progressBar.setRange( 0, 100 )
self.progress.connect( self.gui.progressBar.setValue )
# You'll want to show the GUI
self.gui.show()
def some_function( self ) :
...
...
...
self.progress.emit( <some_number> )
这样首先显示GUI。然后非gui元素开始工作,并与gui交互以在progressBar中显示进度谢谢,这非常有用
class B(QObject):
progress = pyqtSignal( int )
# Other class constructs/functions/members
...
...
class A( QMainWindow ) :
"""Qt Application Details
"""
def __init__( self ) :
"""Class initialiser
"""
...
self.createGUI()
self.setupBCD()
def createGUI( self ) :
# Create you progress bars and other gui
...
...
self.progressBar = QProgressBar( self )
self.progressBar.setRange( ... )
def setupBCD( self ) :
# Setup classes B, C and D
self.classB = B()
self.classB.progress.connect( self.progressBar.setValue )
# Similar connection for others
...
...