| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import tkinter as tk
- from tkinter import ttk, filedialog, messagebox
- from datetime import datetime
- class JournalGeneratorGUI:
- """日记账生成器GUI界面"""
-
- def __init__(self, root, journal_generator, parser_factory):
- self.root = root
- self.journal_generator = journal_generator
- self.parser_factory = parser_factory
-
- self.company_var = tk.StringVar(value="成都锦高量科科技有限公司")
- self.bank_var = tk.StringVar(value="建设银行")
- self.param_file_var = tk.StringVar()
- self.flow_file_var = tk.StringVar()
-
- self.setup_ui()
-
- def setup_ui(self):
- """设置界面"""
- self.root.title("出纳日记账生成工具")
- self.root.geometry("600x300")
-
- frame_company = ttk.Frame(self.root, padding="10")
- frame_company.pack(fill=tk.X)
- ttk.Label(frame_company, text="公司名称:").pack(side=tk.LEFT)
- company_combo = ttk.Combobox(frame_company, textvariable=self.company_var, state="readonly")
- company_combo["values"] = [
- "成都锦高量科科技有限公司", "成都云启寰宇科技有限公司", "成都橙风有量科技有限公司", "绵阳新手游圈科技有限公司",
- "成都云端助手科技有限公司","江苏有量科技有限公司","深圳市星域互娱科技有限公司","深圳云端助手科技有限公司"
- ]
- company_combo.pack(side=tk.LEFT, padx=5)
-
- frame_bank = ttk.Frame(self.root, padding="10")
- frame_bank.pack(fill=tk.X)
- ttk.Label(frame_bank, text="开户银行:").pack(side=tk.LEFT)
- bank_combo = ttk.Combobox(frame_bank, textvariable=self.bank_var, state="readonly")
- bank_combo["values"] = ["建设银行", "中国银行", "农业银行", "微众银行", "农信银行"]
- bank_combo.pack(side=tk.LEFT, padx=5)
-
- frame_param = ttk.Frame(self.root, padding="10")
- frame_param.pack(fill=tk.X)
- ttk.Label(frame_param, text="参数表文件:").pack(side=tk.LEFT)
- ttk.Entry(frame_param, textvariable=self.param_file_var, width=50).pack(side=tk.LEFT, padx=5)
- ttk.Button(frame_param, text="选择", command=self.select_param_file).pack(side=tk.LEFT)
-
- frame_flow = ttk.Frame(self.root, padding="10")
- frame_flow.pack(fill=tk.X)
- ttk.Label(frame_flow, text="流水文件:").pack(side=tk.LEFT)
- ttk.Entry(frame_flow, textvariable=self.flow_file_var, width=50).pack(side=tk.LEFT, padx=5)
- ttk.Button(frame_flow, text="选择", command=self.select_flow_file).pack(side=tk.LEFT)
-
- frame_generate = ttk.Frame(self.root, padding="10")
- frame_generate.pack(fill=tk.X)
- ttk.Button(frame_generate, text="生成日记账", command=self.generate_journal, style="Accent.TButton").pack()
-
- def select_param_file(self):
- """选择参数表文件"""
- file_path = filedialog.askopenfilename(
- title="选择参数表文件",
- filetypes=[("Excel文件", "*.xlsx *.xls"), ("所有文件", "*.*")]
- )
- if file_path:
- self.param_file_var.set(file_path)
-
- def select_flow_file(self):
- """选择银行流水文件"""
- bank = self.bank_var.get()
- file_path = filedialog.askopenfilename(
- title=f"选择{bank}流水文件",
- filetypes=[("Excel文件", "*.xlsx *.xls"), ("所有文件", "*.*")]
- )
- if file_path:
- self.flow_file_var.set(file_path)
-
- def generate_journal(self):
- """生成日记账"""
- company = self.company_var.get()
- bank = self.bank_var.get()
- param_file = self.param_file_var.get()
- flow_file = self.flow_file_var.get()
-
- if not param_file or not flow_file:
- messagebox.showwarning("提示", "请先选择参数表和流水文件")
- return
-
- parser = self.parser_factory.get_parser(bank)
- if parser is None:
- messagebox.showerror("错误", f"不支持的银行:{bank}")
- return
-
- flow_df = parser.parse(flow_file)
- if flow_df is None:
- return
-
- journal_df = self.journal_generator.generate_journal_data(company, bank, param_file, flow_df)
- if journal_df is None:
- return
-
- today = datetime.now().strftime("%Y年%m月%d日")
- save_path = filedialog.asksaveasfilename(
- title="保存日记账",
- defaultextension=".xlsx",
- initialfile=f"{company}-{bank}-日记账-{today}.xlsx",
- filetypes=[("Excel文件", "*.xlsx"), ("所有文件", "*.*")]
- )
- if save_path:
- if self.journal_generator.save_journal(journal_df, save_path):
- messagebox.showinfo("成功", f"日记账已生成:{save_path}")
|