从 GUI 收集变量

Collecting variables from a GUI

我有一个简单的 GUI,用户可以在其中选择一个文件,该文件成为我的主要代码的一个变量。在这里,我的变量输出应该是用户输入的数据库路径(gui_db_path)。当我 运行 这段代码称为 gui_test.py 时,变量是可打印的,并打印到控制台。

class GUI:

    def __init__(self, window): 
        # 'StringVar()' is used to get the instance of input field
        self.input_db_text = StringVar()

  window.title("HyPep 1.0")
        window.geometry("700x700")

        ttk.Label(window, text='Database sequences .csv:').grid(row=1,column=0)
        ttk.Button(window, text = "Browse", command = lambda: self.set_path_database_field()).grid(row = 1,column=2, ipadx=5, ipady=0) 
        ttk.Entry(window, textvariable = self.input_db_text, width = 70).grid( row = 1, column = 1, ipadx=1, ipady=1) 

        ttk.Button(window, text = "Analyze").grid(row = 10,column=1, ipadx=5, ipady=15) 

    def set_path_database_field(self):
        self.path_db = askopenfilename() 
        self.input_db_text.set(self.path_db)

    def get_database_path(self): 
        """ Function provides the database full file path."""
        return self.path_db

if __name__ == '__main__':
    window = tkinter.Tk()
    gui = GUI(window)
    window.mainloop()

    print(gui.path_db, '\n', gui.path_qu)
    
    gui_db_path = gui.path_db
    print(gui_db_path)

我的问题是我需要检索此变量以便在另一个文件 user_input.py 中使用,但它不再可调用。我的 user_input.py 代码是:

from gui_test import gui_db_path

print(gui_db_path)

在这种情况下,我没有打印到控制台,而是:

ImportError: cannot import name 'gui_db_path' from 'gui_test'

我确定我缺少一个简单的解决方案,任何人都可以解释一下吗?

... 更新:更接近,需要扩展解决方案:

我将如何扩展它以检索多条路径?我一直在尝试这个:

gui_test.py:

...
def get_db_path():
    window = tkinter.Tk()
    gui = GUI(window)
    window.mainloop()

    return gui.get_database_path()

def get_qu_path():
    window = tkinter.Tk()
    gui = GUI(window)
    window.mainloop()

    return gui.get_query_path()

user_input.py:

from gui_test import get_db_path
from gui_test import get_qu_path

gui_db_path = get_db_path()
gui_qu_path = get_qu_path()

请注意,导入文件时不会执行 if __name__ == '__main__' 块中的代码。您需要将这些代码放在一个函数中,并 returns 函数末尾的路径:

gui_test.py
...
def get_db_path():
    window = tkinter.Tk()
    gui = GUI(window)
    window.mainloop()

    return gui.get_database_path()

然后在里面导入这个函数user_input.py:

from gui_test import get_db_path

gui_db_path = get_db_path()
print(gui_db_path)