无法从pyqt5访问生成的代码中的变量

时间:2016-08-15 15:18:53

标签: python multithreading pyqt5

这是我的第一篇文章,我想感谢Stack Overflow这个令人惊叹的社区帮助我这些年!

然而,经过广泛的研究,我无法找到解决问题的方法。我有QtCreator生成的文件,其中包含一个进度条。 在我的代码中,我有2个类,1个是Thread。此线程必须更改进度条的值,但我完全没有这样做。

我无法从我的Thread访问变量,但我可以从Mainwindow的init中访问。我认为这个问题是setprogressBar中“self”变量的本质,但我确实发现它是什么......

当我尝试执行此代码时,结果如下:

File "C:\test.py", line 14, in setprogressBar
self.progressBar.setProperty("value", pourcentage)
AttributeError: type object 'MainWindow' has no attribute 'progressBar'

使用QtCreator生成的文件A:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        self.progressBar = QtWidgets.QProgressBar(self.widget)
        self.progressBar.setObjectName("progressBar")

文件B,我的代码:

from PyQt5 import QtWidgets
from UImainwindow import Ui_MainWindow
from threading import Thread
import sys

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 # access variables inside of the UI's file
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self) # gets defined in the UI file
        self.progressBar.setProperty("value", 24) #This is working

    def setprogressBar(self, pourcentage):
        self.progressBar.setProperty("value", pourcentage) #This is not

class B(Thread):
    def __init__(self):
        Thread.__init__(self)

    def run(self):          
        MainWindow.setprogressBar(MainWindow ,48)

APP = QtWidgets.QApplication(sys.argv)

Bi = B()
Bi.start()

MAINWIN = MainWindow()
MAINWIN.show()

APP.exec_()

对帮助人员来说太多了!

1 个答案:

答案 0 :(得分:0)

MainWindow是一个类,而不是一个对象。你应该做的是:

class B(Thread):
    def __init__(self, target):
        self.__target = target

    def run(self):
        self.__target.setprogressBar(48)

MAINWIN = MainWindow()

bi = B(MAINWIN)
bi.start()

MAINWIN.show()