函数中的 PyQt4 名称未定义
PyQt4 name in function not defined
以下代码显示带有 lineedit 和按钮的小部件:
import sys
from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, QLineEdit, QLabel, QComboBox, QProgressBar, QFileDialog
from PyQt4.QtCore import QSize, pyqtSlot
class App(QMainWindow):
def __init__(self):
super(App, self).__init__()
self.setGeometry(500, 300, 820, 350)
self.setWindowTitle("Widget")
self.initUI()
def initUI(self):
#Buttons
btnposx = 30
btnposy = 50
btn4 = QPushButton('Button 4', self)
btn4.move(btnposx,btnposy+220)
btn4.clicked.connect(self.le1_get)
#LineEdits
leposx = 150
leposy = btnposy
le1 = QLineEdit(self)
le1.move(leposx,leposy)
le1.resize(630,26)
self.show()
@pyqtSlot()
def le1_get(self):
le1inp = self.le1.text()
print(le1inp)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
Spyder 显示 le1 的名称(在函数中)未定义。但是就是在上面的函数中。
输出:
le1inp = self.le1.text()
AttributeError: 'App' object has no attribute 'le1'
这只是一个 Python 错误 - 与 PyQt 无关。在这一行中,您尝试查找 App 类型的实例属性 le1
:
le1inp = self.le1.text()
正如错误信息所说,您还没有创建这样的属性。 Python 保持属性和局部变量之间的句法区别。您之前已经定义了一个具有相似名称的本地(现在超出范围),该名称可能被认为是必需的实例属性。只需将代码更改为:
self.le1 = QLineEdit(self)
self.le1.move(leposx,leposy)
self.le1.resize(630,26)
这应该可以解决这个问题。您可能想对按钮执行相同的操作。
以下代码显示带有 lineedit 和按钮的小部件:
import sys
from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, QLineEdit, QLabel, QComboBox, QProgressBar, QFileDialog
from PyQt4.QtCore import QSize, pyqtSlot
class App(QMainWindow):
def __init__(self):
super(App, self).__init__()
self.setGeometry(500, 300, 820, 350)
self.setWindowTitle("Widget")
self.initUI()
def initUI(self):
#Buttons
btnposx = 30
btnposy = 50
btn4 = QPushButton('Button 4', self)
btn4.move(btnposx,btnposy+220)
btn4.clicked.connect(self.le1_get)
#LineEdits
leposx = 150
leposy = btnposy
le1 = QLineEdit(self)
le1.move(leposx,leposy)
le1.resize(630,26)
self.show()
@pyqtSlot()
def le1_get(self):
le1inp = self.le1.text()
print(le1inp)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
Spyder 显示 le1 的名称(在函数中)未定义。但是就是在上面的函数中。
输出:
le1inp = self.le1.text()
AttributeError: 'App' object has no attribute 'le1'
这只是一个 Python 错误 - 与 PyQt 无关。在这一行中,您尝试查找 App 类型的实例属性 le1
:
le1inp = self.le1.text()
正如错误信息所说,您还没有创建这样的属性。 Python 保持属性和局部变量之间的句法区别。您之前已经定义了一个具有相似名称的本地(现在超出范围),该名称可能被认为是必需的实例属性。只需将代码更改为:
self.le1 = QLineEdit(self)
self.le1.move(leposx,leposy)
self.le1.resize(630,26)
这应该可以解决这个问题。您可能想对按钮执行相同的操作。