簡體   English   中英

從另一個 class 調用 self 變量(在另一個模塊中)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM