您好我想从另一个档案中获取变量,但我不知道我做错了什么。
这是第一个文件。我试图从第二个文件中的列表中获取值并将它们放入组合框中,但我不知道如何将列表返回到第一个文件。我尝试了return语句,但它告诉我应该没有
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()
感谢您的时间。
答案 0 :(得分:0)
如果删除第二个文件中的类Column,这将是一个更简单的设计。如您所示,功能可以解决您的问题。
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()
答案 1 :(得分:0)
在第二个文件selectColumn.py
中,您可以定义类Column
。它的__init__()
方法对数据库执行select查询,并检索它存储在变量data
中的所有行。方法结束时data
超出范围并被删除。因此,您以后无法再次检索它,它会丢失。
您需要做的是将查询结果分配给对象的成员(或属性)。为此,请使用self.data = cursor.fetchall()
。现在,您可以通过data
类的实例访问Column
。
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()
将返回元组列表。每个元组包含一个元素,即项目ID。对于这个类的用户来说,只有没有元组包装器的ID的列表会更方便。为此,我使用列表推导来提取每个元组的第一个(也是唯一的)元素。这会产生一个ID列表。
现在,在第一个文件中,您可以执行此操作:
column = selectColumn.Column()
...
for item_id in column.data:
combo.addItem(item_id)