从父窗口小部件的函数访问对象函数

2024-04-26 06:03:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个大型程序,并将PyQt用于GUI。整个程序被分成不同的模块,以便不同的人可以同时进行工作,而不干扰其他人的工作。你知道吗

我现在正在学习3个不同的模块。1是主程序窗口,它处理基本UI并分配小部件,因此主窗口(这并不重要,只是为了让您知道为什么代码看起来不像完整的程序)

首先是小部件:

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()

所以问题是,当我直接从按钮click调用actStart函数时,我可以很好地使用它,但当我通过另一个函数调用它时,就不行了。在使用actStartGif函数调用自定义gif的actStart时,我使用了许多不同的方括号、self和Page1变体。你知道吗

任何帮助都将不胜感激。你知道吗


Tags: fromimportself程序initdefclassparent
1条回答
网友
1楼 · 发布于 2024-04-26 06:03:09

当您使用connect时,有必要传递函数的名称,因为它在内部负责调用它,在您的情况下,您必须直接调用它,因此您必须传递它的参数,在本例中是事件

self.lbl1GIF.actStart({your value for event})

我不明白你为什么用事件来处理发生在你身上的事情:

def actStartGif(self):
    self.lbl1GIF.actStart(None)

相关问题 更多 >