自定义数据集(excel),AI 制图关键词生成器,python编写。
1.数据集(excel)文件
文件遵循下图的格式,红框中目录名称与单个工作表名称能对应即可,顺序无关紧要。工作表第一行为表头(可随意),程序默认从第二行开始读取数据。

2.python代码
import tkinter as tk
from tkinter import ttk
import pandas as pd
import functools
import pyperclip
import tkinter.messagebox as messagebox
def button_clicked(button):
button_text = button.cget('text')
text = text_area.get('1.0', 'end-1c').replace(button_text + ',', '')
# 定义一个状态变量,初始为默认状态
if not hasattr(button, 'state'):
button.state = 'active'
if button.state == 'active':
# 如果按钮状态为活动状态,则将文本填充到text_area并设置背景色和文字颜色
text_area.insert(tk.END, button_text + ',')
button.config(fg="#ffffff",bg="#082386")
button.state = 'default'
else:
# 如果按钮状态为默认状态,则恢复默认样式
text_area.delete('1.0', 'end-1c')
text_area.delete('1.0', 'end')
text_area.insert(tk.END, text)
button.config(fg="#0c1d36",bg="#f0f0f0")
button.state = 'active'
def create_message_box(message):
messagebox = tk.Toplevel(window)
messagebox.geometry("200x80")
messagebox.title("提示")
label = tk.Label(messagebox, text=message)
label.pack(pady=20)
messagebox.after(1500, messagebox.destroy)
messagebox.update_idletasks()
x = (window.winfo_width() - messagebox.winfo_reqwidth()) // 2
y = (window.winfo_height() - messagebox.winfo_reqheight()) // 2
messagebox.geometry("+%d+%d" % (window.winfo_rootx() + x, window.winfo_rooty() + y))
def clear_text():
text_area.delete('1.0', 'end')
# 将所有按钮的背景色设置为默认颜色
for button in button_list:
button.config(fg="#0c1d36",bg="#f0f0f0")
create_message_box("文本已清空")
def copy_text():
text = text_area.get('1.0', 'end-1c')
pyperclip.copy(text)
create_message_box("文本已复制到剪贴板")
def create_buttons(tab_frame, button_data):
# 创建Canvas控件作为按钮区域的父容器
canvas = tk.Canvas(tab_frame, width=800, height=500)
canvas.pack(side="left", fill="both", expand=True)
# 创建滚动条
scrollbar = ttk.Scrollbar(tab_frame, orient="vertical", command=canvas.yview)
scrollbar.pack(side="right", fill="y")
# 设置Canvas控件的滚动条属性
canvas.configure(yscrollcommand=scrollbar.set)
canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
button_frame = tk.Frame(canvas)
canvas.create_window((0,0), window=button_frame, anchor="nw")
buttons_per_row = 8 # 每行按钮的数量
button_width = 19 # 按钮的宽度
row_counter = 0
col_counter = 0
for row in button_data:
if isinstance(row, str) and row.strip() != '':
button = tk.Button(button_frame, text=row, width=button_width,fg="#0c1d36",bg="#f0f0f0")
button_list.append(button) # 将每个按钮加入到 button_list 中
button["command"] = functools.partial(button_clicked, button)
button.grid(row=row_counter, column=col_counter, padx=2, pady=2, sticky='W')
col_counter += 1
if col_counter == buttons_per_row:
row_counter += 1
col_counter = 0
# 创建窗口
window = tk.Tk()
# 设置窗口大小和位置
window.geometry("1200x600")
button_list = [] # 初始化button_list
file_path='data.xlsx'
# 创建上部分的框架
frame_top = tk.Frame(window, height=120)
frame_top.pack(fill="x")
# 在上部分框架中添加文本域
text_area = tk.Text(frame_top, height=5, fg="#ffdf13", bg="#0c1d36", font=("Helvetica", 11), exportselection=False)
text_area.pack(fill="both", expand=True)
# 在文本域中插入文字
text_area.insert(tk.END, "")
# 创建上部分的框架
frame_mid = tk.Frame(window, height=120)
frame_mid.pack()
# 创建清空按钮
clear_button = tk.Button(frame_mid, text='清空',fg="#ffffff", bg="#082386", font=("Helvetica", 11),width=12, command=clear_text)
clear_button.pack(side="left",padx=2, pady=2)
# 创建复制按钮
copy_button = tk.Button(frame_mid, text='复制', fg="#ffffff", bg="#082386", font=("Helvetica", 11), width=12, command=copy_text)
copy_button.pack(padx=2, pady=2)
# 创建下部分的框架
frame_bottom = tk.Frame(window)
frame_bottom.pack()
# 在下部分框架中创建一个Tab控件
tab_control = ttk.Notebook(frame_bottom)
# 创建选项卡
data = pd.read_excel(file_path, sheet_name="目录", header=None)
tabs = data.iloc[1:, 0].values.tolist()
for tab in tabs:
tab_frame = ttk.Frame(tab_control)
tab_control.add(tab_frame, text=tab)
# 用选项卡的值去data.xlsx文件找到对应的表
tab_table = pd.read_excel(file_path, sheet_name=tab)
# 找到对应的表后,取表的第一行数据作为新选项卡的选项显示出来
options = tab_table.columns.values.tolist()
option_control = ttk.Notebook(tab_frame)
for option in options:
option_frame = ttk.Frame(option_control)
option_control.add(option_frame, text=option)
# 在option_frame中调用create_buttons函数创建按钮
first_row = tab_table.columns.get_loc(option)
option_table = pd.read_excel(file_path, sheet_name=tab, usecols=[first_row])
button_data = option_table.iloc[:, 0].tolist()
create_buttons(option_frame, button_data)
option_control.pack(expand=True, fill="both")
tab_control.pack(expand=True, fill="both")
# 自定义选项卡样式
style = ttk.Style()
style.configure("TNotebook.Tab", font=("Helvetica", 10), padding=[5, 5, 5, 5],width=900,tabposition='nw',)
style.map("TNotebook.Tab", background=[("selected", "#003780")])
# 运行窗口
window.mainloop()
