我试图遵循面向对象的方法创建一个简单的tkinter应用程序来显示一些数据,但我很难在 Select 文件的菜单栏类和最终处理文件的主应用程序类之间传递值.现在,我只是想在屏幕上的标签中显示文件名.我试图将文件名作为tk传递.StringVar,但屏幕上没有更新.下面是简化代码.
import tkinter as tk
from tkinter import filedialog as fd #needed for file dialogues
from tkinter import ttk
class MenuBar(tk.Menu):
def __init__(self):
super().__init__()
self.file_audio = tk.StringVar()
fileMenu = tk.Menu(self, tearoff=0)
fileMenu.add_command(label="Select file...", command=self.select_file)
self.add_cascade(label="File", menu=fileMenu)
# method to select a single file
def select_file(self):
self.file_audio = fd.askopenfilename(title='Open a file')
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title('Title')
self.geometry("800x300")
self.menubar = MenuBar()
self.config(menu=self.menubar)
self.createWidgets()
def createWidgets(self):
self.file_info = ttk.Label(self, text = self.menubar.file_audio)
self.file_info.grid(column=1, row=1)
def main():
app = App()
app.mainloop()
if __name__ == "__main__":
main()