PyQT5应用程序中的自我范围?
Posted
技术标签:
【中文标题】PyQT5应用程序中的自我范围?【英文标题】:Self scope in PyQT5 app? 【发布时间】:2013-12-04 14:20:29 【问题描述】:我正在尝试完成我的第一个 Python 学习应用程序,我使用 PyQT5 设计器制作了一个基本的 UI,并使用以下内容进行了测试,我得到了 NameError: global name 'self' is not defined
错误。我的问题是在 GUI 中更新 txtProg
(文本编辑器)的正确程序是什么。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'main.ui'
#
# Created: Sun Dec 1 20:19:03 2013
# by: PyQt5 UI code generator 5.1.1
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from mydl import TheDLClass
def progress_hook(txt):
self.txtProg.setText(txt)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.txtProg = QtWidgets.QPlainTextEdit(self.centralwidget)
self.txtProg.setGeometry(QtCore.QRect(50, 80, 661, 431))
self.txtProg.setObjectName("txtProg")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.launchit(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "My Downloader"))
def launchit(self, MainWindow):
MainWindow.setWindowTitle('Launching..')
with TheDLClass() as dl:
dl.fd.add_progress_hook(progress_hook)
dl.download(['http://myurl.com/'])
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
【问题讨论】:
【参考方案1】:如果不明确传递self
,您将无法访问它。 (使用方法或 lambda)
最好将progress_hook
定义为实例方法:
def progress_hook(self, txt):
self.txtProg.setText(txt)
并将其绑定如下:
def launchit(self, MainWindow):
MainWindow.setWindowTitle('Launching..')
with TheDLClass() as dl:
dl.fd.add_progress_hook(self.progress_hook) # <----
dl.download(['http://myurl.com/'])
【讨论】:
现在是AttributeError: 'Ui_MainWindow' object has no attribute 'progress_hook'
@Stacked,您是否将progress_hook
定义为Ui_MainWindow
?
@Stacked,像其他方法一样在Ui_MainWindow
中定义它:setupUi
、retranslateUi
、launchit
。正确缩进。
@Stacked,先读Tutorial怎么样?
会这样做,通过示例和代码脚本学习“完成工作”是我过去使用的方法。谢谢。以上是关于PyQT5应用程序中的自我范围?的主要内容,如果未能解决你的问题,请参考以下文章