首页 > 解决方案 > 'receiver' 没有定义,但它确实有价值

问题描述

我一直试图让这个函数运行,它总是出现这个错误,告诉我没有定义“接收者”,而“接收者”实际上是一个用户输入的词,并被传递到我试图运行的这个窗口这个功能上。我做错了什么?
第一个窗口的代码简化:

from PyQt5 import QtCore, QtGui, QtWidgets
from SecondWindow import Ui_SecondWindow

class Ui_FristWindow(object):

     def setupUi(self, FirstWindow):        
        MainWindow.resize(900, 700)

        self.horizontalLayout = QtWidgets.QHBoxLayout()               

        self.centralwidget = QtWidgets.QWidget(FirstWindow)        

        self.lineEdit1 = QtWidgets.QLineEdit(self.centralwidget)       
        self.horizontalLayout.addWidget(self.lineEdit1)

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)        
        self.pushButton.clicked.connect(self.openwindow)
        self.horizontalLayout.addWidget(self.pushButton)

     def openwindow(self):
        self.window = QtWidgets.QMainWindow()
        self.receiver = self.lineEdit1.text()
        self.ui = Ui_SecondWindow(self.receiver)
        self.ui.setupUi(self.window)
        self.window.show()

代码简化,只保留第二个窗口的重要部分

import sqlite3
from PyQt5 import QtCore, QtGui, QtWidgets

conn = sqlite3.connect('storage.db')
cursor = conn.cursor()

class Ui_SecondWindow(object):

    def __init__(self, receiver):  #This is where the word got passed on from the first window
        self.receiver = receiver    
        print (self.receiver)      

    def select_db(self): 

        cursor.execute(('SELECT * FROM mytable WHERE Dragons = ?', self.receiver)) 
        data = cursor.fetchall()
        for row in data:
            row[0] = data2
        data2 = str(data2)
        print(len(data2))
        self.label_5.setText(str(data2))

window2 = Ui_WordWindow(receiver) # This is where it tells me that receiver is not defined while i already passed the word on receiver in __init__ func 
window2.select_db()
cursor.close()
conn.close

标签: pythonsqlitepyqt

解决方案


这是您的程序直到错误点:

import sqlite3
from PyQt5 import QtCore, QtGui, QtWidgets

conn = sqlite3.connect('storage.db')
cursor = conn.cursor()

class Ui_SecondWindow(object):
    # define a class

window2 = Ui_WordWindow(receiver)

您在此没有任何地方定义receiver。类__init__函数需要此值才能执行。该方法的局部变量receiver在您提供之前没有值,并且这两个变量不是同一个对象。


推荐阅读