【发布时间】:2019-08-22 10:17:28
【问题描述】:
我想从另一个类/线程(DownloadThread() 类)访问进度条(在 Ui_MainWindow() 类中)setMaximum()。
我尝试让DownloadThread() 类继承自Ui_MainWindow:
DownloadThread(Ui_MainWindow)。但是当我尝试设置最大进度条值时:
Ui_MainWindow.progressBar.setMaximum(100)
我收到此错误:
AttributeError:类型对象“Ui_MainWindow”没有属性“progressBar”
我的代码:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
# ...
self.updateButton = QtGui.QPushButton(self.centralwidget)
self.progressBar = QtGui.QProgressBar(self.centralwidget)
self.updateStatusText = QtGui.QLabel(self.centralwidget)
# ...
self.updateButton.clicked.connect(self.download_file)
# ...
def download_file(self):
self.thread = DownloadThread()
self.thread.data_downloaded.connect(self.on_data_ready)
self.thread.start()
def on_data_ready(self, data):
self.updateStatusText.setText(str(data))
class DownloadThread(QtCore.QThread, Ui_MainWindow):
data_downloaded = QtCore.pyqtSignal(object)
def run(self):
self.data_downloaded.emit('Status: Connecting...')
ftp = FTP('example.com')
ftp.login(user='user', passwd='pass')
ftp.cwd('/some_directory/')
filename = '100MB.bin'
totalsize = ftp.size(filename)
print(totalsize)
# SET THE MAXIMUM VALUE OF THE PROGRESS BAR
Ui_MainWindow.progressBar.setMaximum(totalsize)
self.data_downloaded.emit('Status: Downloading...')
global localfile
with open(filename, 'wb') as localfile:
ftp.retrbinary('RETR ' + filename, self.file_write)
ftp.quit()
localfile.close()
self.data_downloaded.emit('Status: Updated!')
def file_write(self, data):
global localfile
localfile.write(data)
print(len(data))
【问题讨论】:
-
我想它是您调用的线程类,因此您需要一个信号来执行此操作并从主窗口访问进度条
-
@ΕυάγγελοςΓρηγορόπουλος 我该如何做信号?
-
Ui_MainWindow.progressBar.setMaximum(100)应该是self.progressBar.setMaximum(100)。
标签: python ftp pyqt progress-bar ftplib