Я пытаюсь создать приложение, которое анализирует данные Excel, а затем печатает результат в сетке tkinter на экране. При выборе «Отчет1» в строке меню я не попадаю к «Отчет1» в классе HomeFrame, где я планировал создать отчет, а затем распечатать результат. Как мне это сделать?
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
class MenuBar(tk.Menu):
def __init__(self, master, controller):
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__(self, parent, controller):
super().__init__(parent)
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, parent, controller):
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: controller.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') # SETS MONITOR SIZE
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
Передача данных между классами в tkinter ⇐ Python
Программы на Python
1771788899
Anonymous
Я пытаюсь создать приложение, которое анализирует данные Excel, а затем печатает результат в сетке tkinter на экране. При выборе «Отчет1» в строке меню я не попадаю к «Отчет1» в классе HomeFrame, где я планировал создать отчет, а затем распечатать результат. Как мне это сделать?
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
class MenuBar(tk.Menu):
def __init__(self, master, controller):
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__(self, parent, controller):
super().__init__(parent)
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, parent, controller):
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: controller.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') # SETS MONITOR SIZE
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79894124/passing-data-between-classes-in-tkinter[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия