Вопрос по Питону, Tkinter
Через функцию всё работает при нажатии кнопки, но эту функцию нужно прикрутить ко многим кнопкам изменив 'A1' на 'A2' и т.д., задать функции аргумент и подставлять его на место 'A1' не получится из-за того что при присваивании command нельзя указывать аргументы. Как это решить не плодя много сущностей?
today = datetime.date.today ()
fn = 'data.xlsx'
wb = load_workbook(fn)
ws = wb['data_bv']
def bv_time():
ws['A1'] = today.strftime("%d-%m-%Y")
wb.save(fn)
wb.close()
По дате
По рейтингу
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
import datetime
import tkinter as tk
from tkinter import messagebox, filedialog
from openpyxl import load_workbook # pip install openpyxl
from functools import partial
class ExcelUpdater:
def __init__(self, filename, sheetname):
"""Инициализация класса и попытка загрузки книги Excel"""
self.filename = filename
self.sheetname = sheetname
self.workbook = None
self.worksheet = None
self.today = datetime.date.today().strftime("%d-%m-%Y")
self.load_workbook()
def load_workbook(self):
"""Загружает файл Excel и рабочий лист, с обработкой ошибок"""
try:
self.workbook = load_workbook(self.filename)
self.worksheet = self.workbook[self.sheetname]
except FileNotFoundError:
messagebox.showerror("Ошибка", f"Файл '{
self.filename}' не найден.")
except KeyError:
messagebox.showerror("Ошибка", f"Лист '{
self.sheetname}' не найден в книге.")
except Exception as e:
messagebox.showerror(
"Ошибка", f"Произошла ошибка при открытии файла: {e}")
def update_cell(self, cell):
"""Обновляет указанную ячейку текущей датой и сохраняет файл"""
if not self.workbook or not self.worksheet:
messagebox.showerror(
"Ошибка", "Невозможно обновить файл. Проверьте, был ли файл корректно загружен.")
return
try:
self.worksheet[cell] = self.today
self.save_and_close()
messagebox.showinfo("Успех", f"Ячейка {cell} обновлена!")
except Exception as e:
messagebox.showerror(
"Ошибка", f"Произошла ошибка при обновлении ячейки: {e}")
def save_and_close(self):
"""Сохраняет изменения в файле и закрывает его"""
try:
self.workbook.save(self.filename)
self.workbook.close()
except Exception as e:
messagebox.showerror("Ошибка", f"Не удалось сохранить файл: {e}")
def select_file():
"""Открывает диалог для выбора файла Excel"""
filetypes = (("Excel files", "*.xlsx"), ("All files", "*.*"))
filename = filedialog.askopenfilename(
title="Выберите файл Excel", filetypes=filetypes)
return filename
def create_button(root, updater, cell):
"""Создаёт кнопку с функцией обновления Excel ячейки"""
button = tk.Button(root, text=f"Update {
cell}", command=partial(updater.update_cell, cell))
button.pack()
def main():
root = tk.Tk()
root.title("Excel Updater")
# Запрашиваем файл через диалоговое окно
filename = select_file()
if not filename:
messagebox.showerror("Ошибка", "Файл не был выбран.")
return
sheetname = 'data_bv' # Название листа, который будет обновляться
# Инициализация класса ExcelUpdater
updater = ExcelUpdater(filename, sheetname)
# Создание нескольких кнопок для обновления разных ячеек
cells = ['A1', 'A2', 'A3', 'A4']
for cell in cells:
create_button(root, updater, cell)
root.mainloop()
if __name__ == "__main__":
main()
1234567891011121314151617181920
import datetime
from openpyxl import load_workbook
import tkinter as tk
today = datetime.date.today()
fn = 'data.xlsx'
wb = load_workbook(fn)
ws = wb['data_bv']
def bv_time(cell):
ws[cell] = today.strftime("%d-%m-%Y")
wb.save(fn)
wb.close()
root = tk.Tk()
for cell in ['A1', 'A2', 'A3']:
btn = tk.Button(root, text=f'Update {cell}', command=lambda c=cell: bv_time(c))
btn.pack()
root.mainloop()
Больше по теме