Передача данных между классами в tkinterPython

Программы на Python
Ответить
Anonymous
 Передача данных между классами в tkinter

Сообщение Anonymous »

Я пытаюсь создать приложение, которое анализирует данные Excel, а затем печатает результат в сетке tkinter на экране. При выборе «Отчет1» в строке меню я не попадаю к «Отчет1» в классе HomeFrame, где я планировал создать отчет, а затем распечатать результат. Как я могу заставить это работать?
import tkinter как tk
из tkinter import ttk
из tkinter import filedialog
class MenuBar(tk.Menu):
def init(self, master, контроллер):
super().init(master)
master.config(menu=self)

Код: Выделить всё

    self.fileMenu = tk.Menu(self, tearoff=0)
self.editMenu = tk.Menu(self, tearoff=0)
self.reportMenu = tk.Menu(self, tearoff=0)

self.fileMenu.add_command(label='Load File', command=self.open_file_dialog)
self.fileMenu.add_command(label='Save')#, command=self.save_file)
self.fileMenu.add_separator()
self.fileMenu.add_command(label='Exit')#, command=root.destroy)

self.editMenu.add_command(label='Cut')#, command=None)
self.editMenu.add_command(label='Copy')#, command=None)
self.editMenu.add_command(label='Paste')#, command=None)
self.editMenu.add_command(label='Select All')#, command=None)
self.editMenu.add_separator()
self.editMenu.add_command(label='Find...')#, command=None)
self.editMenu.add_command(label='Find again')#, command=None)

self.reportMenu.add_command(label='Report 1', command=self.report1)
self.reportMenu.add_command(label='Demo')#, command=None)
self.reportMenu.add_separator()
self.reportMenu.add_command(label='About Tk')#, command=None)

self.add_cascade(label='File', menu=self.fileMenu)
self.add_cascade(label='Edit', menu=self.editMenu)
self.add_cascade(label='Reports', menu=self.reportMenu)

def open_file_dialog(self):

filename = filedialog.askopenfilename(initialdir="C:, title="Select A File",
filetypes=(("Excel Files", "*.xlsx"), ("All Files", "*.*")))
return(filename)
class HomeFrame(ttk.Frame):
def init(собственный, родительский, контроллер):
super().init(родительский)

Код: Выделить всё

    self.outer_frame = ttk.Frame(self, borderwidth=5)  # This creates an inner frame for placement of widgets
self.outer_frame.pack(fill="both", expand=True)

def report1(self):
self.tk.label1 = ttk.Label(self.outer_frame, text="Made It To Report 1", font=("Arial", 24), )
self.tk.label1.grid(row=0, column=0)
return()
self.create_dataframe(filename)

btn1 = ttk.Button(outer_frame, text="Go to Settings", command=lambda: controller.show_frame("Settings"))
btn1.grid(row = 0, column=1)
class SettingsFrame(ttk.Frame):
def init(self, родительский, контроллер):
super().init(parent)
ttk.Label(self, text="Settings", font=("TkDefaultFont", 16)).pack(padx=20, pady=20)
ttk.Button(self, text="Back to Home", command=lambda: контроллер.show_frame("Home")).pack()
class App(tk.Tk):
def init(self):
super().init()
app_width = self.winfo_screenwidth()
app_height = self.winfo_screenheight()
self.geometry(f'{self.winfo_screenwidth() - 10}x{self.winfo_screenheight()}+0+0') # ЗАДАВАЕТ РАЗМЕР МОНИТОРА
self.title("Banking Analysis")
container = ttk.Frame(self)
container.pack(fill="both", expand=True)
container.grid_rowconfigure(0, Weight=1)
container.grid_columnconfigure(0, Weight=1)

Код: Выделить всё

    self.frames = {}                                                        # Add additional frames here if needed
for F, name in ((HomeFrame, "Home"), (SettingsFrame, "Settings")):
frame = F(container, self)
self.frames[name] = frame
frame.grid(row=0, column=0, sticky="nsew")

MenuBar(self, controller=self)  # pass the app (controller) into the menubar
self.show_frame("Home")                                             # Menubar starts, showing the HOME frame

def show_frame(self, name):
frame = self.frames[name]
frame.tkraise()
if name == "main":
App().mainloop()

Подробнее здесь: https://stackoverflow.com/questions/798 ... in-tkinter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»