[英]Call self variable from another class (in another module)
我試圖在 OpenFile() 中調用變量“self.filename”,該變量通過另一個模塊 db.py、AddData() 中的 QFileDialog(GUI)獲取文件路徑(作為變量“url =..”)。 如何在另一個模塊中調用名為 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()
為什么不簡單地將filename
作為參數傳遞給AddData
方法? 結果應該類似於:
#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()
還要注意一致地命名你的函數(camelCase)。 我將您的AddData
重命名為addData
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.