簡體   English   中英

將 tkinter openfilename 傳遞給實例變量

[英]pass tkinter openfilename to a instance variable

檢查:

python 傳遞變量 tkinter

Tkinter - 如何將實例變量傳遞給另一個 class?

和其他 web 資源,但沒有找到解決方案。

我有一個 Tkinter 按鈕來打開文件:

import tkinter as tk
from tkinter import filedialog as fd
from myClass import my_function 

class select_file:
def __init__(self):
    self.root = tk.Tk()
    self.filename = ""

    tk.Button(self.root, text="Browse", command=self.open).pack()
    self.root.mainloop()

def open(self):
    filetypes = (('LOG files', '*.LOG'), ('All files', '*.*'))
    self.filename = fd.askopenfilename(title='open LOG file', filetypes=filetypes)

    
    self.root.destroy()
    print(self.filename)
    return self.filename

這很好,因為我可以以正確的方式獲取文件路徑。

Output:

C:/Users/xxxx/xxxxx/Dataset/SC180918.LOG

我的問題是如何將選定的文件名作為實例變量傳遞給同一項目中的其他 function 但在另一個文件(myClass.py)中:

class my_function:
log_frame = pd.DataFrame()


def __init__(self, file):
    self.file = file

 def create_df(self):
    myClass.log_frame = pd.read_table(self.file, sep=';', index_col='TimeStamp', parse_dates=True)
    return myClass.log_frame

我的任務是將文件傳遞給 create_df。 我嘗試了幾個我不會發布的代碼,以避免混淆和不工作的代碼。

我會這樣做;

sfClass = select_file() # select filename by Browse
filename = sfClass.filename # get filename from the class
mfClass = my_function(filename) # pass it to the class

由於文件很重要,我生成了兩個 python 文件,如下所示:

我的類.py:

class my_function:
    def __init__(self, file):
        self.file = file
    def create_df(self):
        print("filename in my_function is ",self.file)

測試我.py:

import tkinter as tk
from tkinter import filedialog as fd
from myClass import my_function 

class select_file:
    def __init__(self):
        self.root = tk.Tk()
        self.filename = ""
        tk.Button(self.root, text="Browse", command=self.open).pack()
        self.root.mainloop()
    def open(self):
        filetypes = (('LOG files', '*.LOG'), ('All files', '*.*'))
        self.filename = fd.askopenfilename(title='open LOG file', filetypes=filetypes)    
        self.root.destroy()
        print("filename in select_file is ",self.filename)
        return self.filename

sfClass = select_file() # select filename by Browse
filename = sfClass.filename # get filename from the class
mfClass = my_function(filename) # pass it to the class
mfClass.create_df()

這是 output 如果我 select testMe.py 文件:

filename in select_file is  C:/Users/XXX/XXX/SOquestions/testMe.py
filename in my_function is  C:/Users/XXX/XXX/SOquestions/testMe.py

結果,文件名已成功傳遞給my_function

我也進行了如下測試:

print(mfClass.file)

它打印: C:/Users/XXX/XXX/SOquestions/testMe.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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