[英]Call self variable from another class (in another module)
I'm trying to call the varible "self.filename" in OpenFile() that takes the file path via QFileDialog (a GUI) in another module db.py, AddData() (as a varible "url =..").我试图在 OpenFile() 中调用变量“self.filename”,该变量通过另一个模块 db.py、AddData() 中的 QFileDialog(GUI)获取文件路径(作为变量“url =..”)。 How to call that self variable named self.filename in another module?
如何在另一个模块中调用名为 self.filename 的 self 变量?
#main.py
class App(QMainWindow):
def __init__(self):
super().__init__()
self.win = uic.loadUi(r"GUI.ui",self)
self.initUI()
self.win.show()
def initUI(self):
self.win.btOpen.clicked.connect(self.OpenFile)
def OpenFile(self):
self.filename=QFileDialog.getOpenFileName(self,"Open File",r"C:","csv File (*.csv)")
db.Database()
#db.py
class Database():
def __init__(self):
super().__init__()
self.db = sql.connect("data.db")
self.cur=self.db.cursor()
self.cur.execute("CREATE TABLE IF NOT EXISTS Table (Col1 real, Col2 real);")
self.AddData()
def AddData(self):
"""Add raw data to database"""
url=r"table.csv"
with open(url) as file:
dr = csv.DictReader(file)
to_db = [(i['Col1'], i['Col2']) for i in dr]
self.cur.executemany("INSERT INTO Table (Col1, Col2) VALUES (?, ?);", to_db)
self.db.commit()
Why don't you simply pass the filename
as a parameter to your AddData
method?为什么不简单地将
filename
作为参数传递给AddData
方法? The result should look similar to this:结果应该类似于:
#main.py
class App(QMainWindow):
def __init__(self):
super().__init__()
# initialize the database
self.database = db.Database()
#self.database.connect() # optionally: connect to your database once in a method separate from the constructor
self.win = uic.loadUi(r"GUI.ui",self)
self.initUI()
self.win.show()
def initUI(self):
self.win.btOpen.clicked.connect(self.OpenFile)
def OpenFile(self):
filename = QFileDialog.getOpenFileName(self,"Open File",r"C:","csv File (*.csv)")
self.database.addData(filename)
#db.py
class Database():
def __init__(self):
super().__init__()
self.db = sql.connect("data.db")
self.cur = self.db.cursor()
self.cur.execute("CREATE TABLE IF NOT EXISTS Table (Col1 real, Col2 real);")
#self.addData() # do not call addData here because there is no default file to load data from (at least it is not outlined in your question)
def addData(self, filename):
"""Add raw data parsed from a csv file to this database"""
url = filename
with open(url) as file:
dr = csv.DictReader(file)
to_db = [(i['Col1'], i['Col2']) for i in dr]
self.cur.executemany("INSERT INTO Table (Col1, Col2) VALUES (?, ?);", to_db)
self.db.commit()
Also pay attention to consistently name your functions (camelCase).还要注意一致地命名你的函数(camelCase)。 I renamed your
AddData
to addData
.我将您的
AddData
重命名为addData
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.