我如何使用在另一个文件中创建的列表

How do i use a list that is made in another file

你好,我正在尝试从另一个文件中获取变量,但我不知道我做错了什么。

这是第一个文件。我正在尝试从第二个文件中创建的列表中获取值并将它们放入组合框中,但我不知道如何 return 列表到第一个文件。我尝试了 return 语句,但它告诉我应该有 none

import sys
from PyQt5.QtWidgets import (QWidget, QLabel, 
QComboBox, QApplication)
import selectColumn


class Example(QWidget):

    def __init__(self):
        super().__init__()

        ItemList=selectColumn.Column()
        print(ItemList)
        self.lbl = QLabel("1", self)
        combo = QComboBox(self)
        for i in range(len(ItemList)):
            Item=ItemList[i]
            combo.addItem(Item)


        combo.move(50, 50)
        self.lbl.move(50, 150)

        combo.activated[str].connect(self.onActivated)        

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QComboBox')
        self.show()


    def onActivated(self, text):

        self.lbl.setText(text)
        self.lbl.adjustSize()  


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

这是第二个文件。这是将列值放入列表的文件。

import sqlite3
class Column(object):
    def __init__(self):
        db= sqlite3.connect("SQLite database")

        cursor = db.cursor()

        cursor.execute("""SELECT Item_ID FROM Items_Table""")
        data = cursor.fetchall()
        print(data)

        db.commit()
        cursor.close()

感谢您的宝贵时间。

如果把第二个文件中的class列去掉,设计会更简单。正如您所展示的,一个函数可以解决您的问题。

import sqlite3
def getData():
  db = sqlite3.connect("SQLite database")
  cursor = db.cursor()
  cursor.execute("""SELECT Item_ID FROM Items_Table""")
  data = cursor.fetchall()
  db.close()
  return data

然后,在第一个文件中,将 ItemList=selectColumn.Column() 行更改为 itensIds = selectColumn.getData()

在第二个文件 selectColumn.py 中,您定义 class Column。它的 __init__() 方法对数据库执行 select 查询并检索它存储在变量 data 中的所有行。在方法结束时 data 超出范围并被删除。因此您以后无法再找回它,它丢失了。

您需要做的是将查询结果分配给对象的成员(或属性)。为此,请使用 self.data = cursor.fetchall()。现在您可以通过 Column class.

的实例访问 data
import sqlite3

class Column(object):
    def __init__(self):
        with sqlite3.connect("SQLite database") as db:
            cursor = db.cursor()    
            cursor.execute("""SELECT Item_ID FROM Items_Table""")
            self.data = [item[0] for item in cursor.fetchall()]    

请注意,我已将代码更改为在打开数据库时使用上下文管理器。这更干净一些,因为您无需担心关闭游标或数据库连接。

此外,cursor.fetchall() 将 return 一个元组列表。每个元组包含一个元素,项目 ID。对于这个 class 的用户来说,拥有一个没有元组包装器的 ID 列表会更方便。为此,我使用列表理解来提取每个元组的第一个(也是唯一一个)元素。这会生成一个 ID 列表。

现在,您可以在第一个文件中执行此操作:

column = selectColumn.Column()
...
for item_id in column.data:
    combo.addItem(item_id)