从 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)
我有一个简单的 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)