import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from tkinter.font import Font
class FileGeneratorGUI:
def __init__(self):
self.window = tk.Tk()
self.window.title("文件生成器")
self.window.geometry("600x500")
self.window.configure(bg='#f0f0f0')
# 设置样式
style = ttk.Style()
style.configure('TLabel', font=('Microsoft YaHei UI', 10), padding=5)
style.configure('TEntry', padding=5)
style.configure('TButton', font=('Microsoft YaHei UI', 10), padding=5)
style.configure("Custom.Horizontal.TProgressbar", thickness=20)
# 创建主框架
main_frame = ttk.Frame(self.window, padding="20")
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# 创建标题
title_font = Font(family='Microsoft YaHei UI', size=16, weight='bold')
title_label = tk.Label(main_frame, text="文件生成器", font=title_font, bg='#f0f0f0')
title_label.grid(row=0, column=0, columnspan=3, pady=20)
# 创建输入框和标签
ttk.Label(main_frame, text="文件大小(MB):").grid(row=1, column=0, sticky=tk.W)
self.size_entry = ttk.Entry(main_frame, width=30)
self.size_entry.grid(row=1, column=1, padx=10, pady=10)
ttk.Label(main_frame, text="文件格式(例如: .txt):").grid(row=2, column=0, sticky=tk.W)
self.format_entry = ttk.Entry(main_frame, width=30)
self.format_entry.grid(row=2, column=1, padx=10, pady=10)
# 输出路径选择
ttk.Label(main_frame, text="输出路径:").grid(row=3, column=0, sticky=tk.W)
self.path_var = tk.StringVar()
self.path_entry = ttk.Entry(main_frame, textvariable=self.path_var, width=30)
self.path_entry.grid(row=3, column=1, padx=10, pady=10)
self.browse_btn = ttk.Button(main_frame, text="浏览", command=self.browse_path)
self.browse_btn.grid(row=3, column=2, padx=5)
# 生成按钮
self.generate_btn = ttk.Button(main_frame, text="生成文件", command=self.generate_file, style='TButton')
self.generate_btn.grid(row=4, column=0, columnspan=3, pady=30)
# 进度条
self.progress = ttk.Progressbar(main_frame, length=400, mode='determinate',
style="Custom.Horizontal.TProgressbar")
self.progress.grid(row=5, column=0, columnspan=3, pady=20)
# 状态标签
self.status_var = tk.StringVar()
self.status_label = ttk.Label(main_frame, textvariable=self.status_var)
self.status_label.grid(row=6, column=0, columnspan=3)
def browse_path(self):
directory = filedialog.askdirectory()
self.path_var.set(directory)
def generate_file(self):
try:
self.generate_btn.configure(state='disabled')
self.status_var.set("正在生成文件...")
size = float(self.size_entry.get())
file_format = self.format_entry.get()
output_path = self.path_var.get()
if not size or not file_format or not output_path:
messagebox.showerror("错误", "请填写所有必要信息!")
return
if not file_format.startswith('.'):
file_format = '.' + file_format
filename = f"generated_file_{size}MB{file_format}"
full_path = os.path.join(output_path, filename)
# 生成文件
bytes_size = int(size * 1024 * 1024) # 转换为字节
with open(full_path, 'wb') as f:
chunk_size = 1024 * 1024 # 1MB chunks
chunks = bytes_size // chunk_size
self.progress['maximum'] = chunks
for i in range(chunks):
f.write(os.urandom(chunk_size))
self.progress['value'] = i + 1
self.status_var.set(f"已完成: {int((i+1)/chunks*100)}%")
self.window.update()
# 处理剩余字节
remaining = bytes_size % chunk_size
if remaining:
f.write(os.urandom(remaining))
messagebox.showinfo("成功", f"文件已生成:\n{full_path}")
self.progress['value'] = 0
self.status_var.set("")
except ValueError:
messagebox.showerror("错误", "请输入有效的文件大小!")
except Exception as e:
messagebox.showerror("错误", f"生成文件时出错:{str(e)}")
finally:
self.generate_btn.configure(state='normal')
def run(self):
self.window.mainloop()
if __name__ == "__main__":
app = FileGeneratorGUI()
app.run()
通过网盘分享的文件:生成指定大小格式的文件.exe
链接: https://pan.baidu.com/s/11gO1LigDTs1lvnFSKJ5sog?pwd=hzhz 提取码: hzhz