我正在嘗試遵循面向物件的方法來創建一個簡單的 tkinter 應用程式來顯示一些資料,但是我正在努力在選擇檔案的 MenuBar 類和最終我將使用該檔案的主 App 類之間傳遞值. 現在我只是想在標簽的螢屏上顯示檔案名。我試圖將檔案名作為 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()
uj5u.com熱心網友回復:
您的代碼中有兩個問題:
textvariable應該使用選項而不是text選項ttk.Label(...)
def createWidgets(self):
self.file_info = ttk.Label(self, textvariable = self.menubar.file_audio)
self.file_info.grid(column=1, row=1)
- 在里面使用
self.file_audio.set(...)而不是賦值MenuBar.select_file()
def select_file(self):
self.file_audio.set(fd.askopenfilename(title='Open a file'))
uj5u.com熱心網友回復:
不確定這是否是您正在尋找的。但是我添加了一行我認為可能有用的代碼。在“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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482707.html
