从父部件的函数访问对象函数
Accessing an object function from a parent widget's function
我正在 Python 中制作一个大型程序,并在 GUI 中使用 PyQt。整个程序分为不同的模块,让不同的人可以同时工作,而不会干扰其他人的工作。
我现在正在研究 3 个不同的模块。 1 是主程序 window,它处理基本的 UI 并分配小部件,因此主程序 window (这并不重要,只是让你知道为什么代码看起来不像一个完整的程序。)
首先是小部件:
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from CustomButton import HoverButton #just a custom button class
from CustomGif import LblLoadingGif #where things go wrong
class Page1(QtGui.QWidget):
def __init__(self, parent=None):
super(Page1, self).__init__(parent)
self.lbl1GIF = LblLoadingGif(self)
self.lbl1GIF.move(400, 45)
self.btnStart = HoverButton(self)
self.btnStart.setText('Start')
self.btnStart.move(35, 400)
self.btnStart.clicked.connect(self.actStartGif)
#the code below works, but then I can only perform 1 action with each button
#self.btnStart.clicked.connect(self.lbl1GIF.actStart)
def actStartGif(self):
self.lbl1GIF.actStart
自定义 GIF 的代码如下所示:
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
class LblLoadingGif(QtGui.QLabel):
def __init__(self, parent=None):
QtGui.QLabel.__init__(self, parent)
self.setStyleSheet('background: url();')
self.setScaledContents(True)
self.resize(100, 100)
self.movLoadGif = QtGui.QMovie('Resources_Images/Loading6.gif', QtCore.QByteArray())
self.movLoadGif.setCacheMode(QtGui.QMovie.CacheAll)
self.movLoadGif.setSpeed(100)
self.setMovie(self.movLoadGif)
self.hide()
def actStart(self, event):
#print('test1')
self.show()
self.movLoadGif.start()
def actStop(self, event):
#print('test1')
self.hide()
self.movLoadGif.stop()
所以问题是,当我直接从按钮单击调用它时,我可以很好地使用 actStart 函数,但当我通过另一个函数调用它时却不行。在使用 actStartGif 函数调用自定义 gif 的 actStart 时,我使用了很多不同的方括号、self、Page1 变体。
我们将不胜感激。
当你使用 connect 时,有必要传递函数的名称,因为它在内部负责调用它,在你的情况下你必须直接调用它所以你必须传递它的参数,在这种情况下事件:
self.lbl1GIF.actStart({your value for event})
我不明白你为什么用事件来描述发生在你身上的事情None:
def actStartGif(self):
self.lbl1GIF.actStart(None)
我正在 Python 中制作一个大型程序,并在 GUI 中使用 PyQt。整个程序分为不同的模块,让不同的人可以同时工作,而不会干扰其他人的工作。
我现在正在研究 3 个不同的模块。 1 是主程序 window,它处理基本的 UI 并分配小部件,因此主程序 window (这并不重要,只是让你知道为什么代码看起来不像一个完整的程序。)
首先是小部件:
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from CustomButton import HoverButton #just a custom button class
from CustomGif import LblLoadingGif #where things go wrong
class Page1(QtGui.QWidget):
def __init__(self, parent=None):
super(Page1, self).__init__(parent)
self.lbl1GIF = LblLoadingGif(self)
self.lbl1GIF.move(400, 45)
self.btnStart = HoverButton(self)
self.btnStart.setText('Start')
self.btnStart.move(35, 400)
self.btnStart.clicked.connect(self.actStartGif)
#the code below works, but then I can only perform 1 action with each button
#self.btnStart.clicked.connect(self.lbl1GIF.actStart)
def actStartGif(self):
self.lbl1GIF.actStart
自定义 GIF 的代码如下所示:
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
class LblLoadingGif(QtGui.QLabel):
def __init__(self, parent=None):
QtGui.QLabel.__init__(self, parent)
self.setStyleSheet('background: url();')
self.setScaledContents(True)
self.resize(100, 100)
self.movLoadGif = QtGui.QMovie('Resources_Images/Loading6.gif', QtCore.QByteArray())
self.movLoadGif.setCacheMode(QtGui.QMovie.CacheAll)
self.movLoadGif.setSpeed(100)
self.setMovie(self.movLoadGif)
self.hide()
def actStart(self, event):
#print('test1')
self.show()
self.movLoadGif.start()
def actStop(self, event):
#print('test1')
self.hide()
self.movLoadGif.stop()
所以问题是,当我直接从按钮单击调用它时,我可以很好地使用 actStart 函数,但当我通过另一个函数调用它时却不行。在使用 actStartGif 函数调用自定义 gif 的 actStart 时,我使用了很多不同的方括号、self、Page1 变体。
我们将不胜感激。
当你使用 connect 时,有必要传递函数的名称,因为它在内部负责调用它,在你的情况下你必须直接调用它所以你必须传递它的参数,在这种情况下事件:
self.lbl1GIF.actStart({your value for event})
我不明白你为什么用事件来描述发生在你身上的事情None:
def actStartGif(self):
self.lbl1GIF.actStart(None)