tkinter 使用菜单中的文件名更新标签 class
tkinter update label with filename from menu class
我正在尝试遵循面向对象的方法来创建一个简单的 tkinter 应用程序来显示一些数据,但我正在努力在选择文件的菜单栏 class 和主应用程序之间传递值class 我最终将在何处处理该文件。现在我只是想在标签中的屏幕上显示文件名。我已尝试将文件名作为 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()
不确定这是否是您要查找的内容。但是我添加了一行我认为可能有用的代码。在“createWidgets”方法中,您应该调用 self.menubar.select_file().
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.menubar.select_file() #Added line of code
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()
您的代码中有两个问题:
应使用 textvariable
选项,而不是 ttk.Label(...)
中的 text
选项
def createWidgets(self):
self.file_info = ttk.Label(self, textvariable = self.menubar.file_audio)
self.file_info.grid(column=1, row=1)
- 在
MenuBar.select_file()
中使用self.file_audio.set(...)
代替赋值
def select_file(self):
self.file_audio.set(fd.askopenfilename(title='Open a file'))
我正在尝试遵循面向对象的方法来创建一个简单的 tkinter 应用程序来显示一些数据,但我正在努力在选择文件的菜单栏 class 和主应用程序之间传递值class 我最终将在何处处理该文件。现在我只是想在标签中的屏幕上显示文件名。我已尝试将文件名作为 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()
不确定这是否是您要查找的内容。但是我添加了一行我认为可能有用的代码。在“createWidgets”方法中,您应该调用 self.menubar.select_file().
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.menubar.select_file() #Added line of code
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()
您的代码中有两个问题:
-
应使用
textvariable
选项,而不是ttk.Label(...)
中的
text
选项
def createWidgets(self):
self.file_info = ttk.Label(self, textvariable = self.menubar.file_audio)
self.file_info.grid(column=1, row=1)
- 在
MenuBar.select_file()
中使用
self.file_audio.set(...)
代替赋值
def select_file(self):
self.file_audio.set(fd.askopenfilename(title='Open a file'))