label.py 4.18 KB
Newer Older
wanglch's avatar
wanglch committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import tkinter as tk
from tkinter import filedialog, Label, simpledialog
from PIL import Image, ImageTk
import json
import random
import string
import os
import shutil
import sys
 
# 创建主窗口
root = tk.Tk()
root.title("Image Viewer with Dialogue")
root.geometry("1000x600")  # 设置窗口默认大小
 
dialogue_entries = []  # 用来存储动态创建的对话输入框
 
# 加载并显示图片的函数
def load_and_display_image():
    global image_label
    global image_path
    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
    image_path = file_path
    if file_path:
        image = Image.open(file_path)
        # 根据原图片宽高比确定图像显示区域的宽度
        width = int((400 / image.height) * image.width)
        image = image.resize((width, 400), Image.ANTIALIAS)
        photo = ImageTk.PhotoImage(image)
        
        if 'image_label' in globals():
            image_label.config(image=photo)
        else:
            image_label = tk.Label(image_frame, image=photo)
            image_label.pack(padx=7, pady=7)
        image_label.image = photo  # keep a reference to the image
        # 创建添加对话的按钮
        add_dialogue_button = tk.Button(root, text="Add Dialogue", command=add_dialogue_boxes)
        add_dialogue_button.pack(side="top", padx=(5, 0), pady=(7, 0))
 
        # 创建保存按钮
        save_button = tk.Button(root, text="Save", command=save_to_json)
        save_button.pack(side="top", pady=(7, 0))
 
        # 创建文本提示框和输入框
        global input_box_1,input_box_2
        input_box_1 = create_labeled_input(root, "Input with the picture:")
        input_box_2 = create_labeled_input(root, "Assistant:")
 
 
 
# 创建左侧的图片显示框架
image_frame = tk.Frame(root)
image_frame.pack(side="left", anchor="nw", padx=7, pady=7)
 
# 创建打开图片的按钮
open_button = tk.Button(root, text="Open Image", command=load_and_display_image)
open_button.pack(side="top", pady=(7, 0))
 
# 创建文本提示框和输入框的函数
def create_labeled_input(parent, label_text):
    label = tk.Label(parent, text=label_text)
    label.pack(side="top")
    entry = tk.Entry(parent, width=50)
    entry.pack(side="top")
    return entry
 
 
 
# 动态添加对话输入框的函数
def add_dialogue_boxes():
    user_entry = create_labeled_input(root, "User:")
    assistant_entry = create_labeled_input(root, "Assistant:")
    dialogue_entries.append((user_entry, assistant_entry))
 
 
# 将输入的文本保存为 JSON 文件的函数
def save_to_json():
    save_dir = "saves"
 
    # 生成一个10位的随机字符串作为文件名
    random_filename = ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
    
    # 确保save_dir存在
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
 
    # 定义JSON文件的完整路径
    json_file_path = os.path.join(save_dir, random_filename + '.json')
    # 定义图片文件的完整路径
    image_file_path = os.path.join(save_dir, random_filename + '.jpg')
 
 
    cat1 = "Picture 1: <img>"
    cat2 = random_filename
    cat3 = ".jpg</img>\n"
    cat4 = input_box_1.get()
    cat = cat1+cat2+cat3+cat4
    dialogue_data = {
        
        "conversations": []
    }
 
    dialogue_data["conversations"].append({
        "from":"user",
        "value": cat
    })
    
    dialogue_data["conversations"].append({
        "from": "assistant",
        "value": input_box_2.get()
    })
    for user_entry, assistant_entry in dialogue_entries:
        dialogue_data["conversations"].append({
            "from": "user",
            "value": user_entry.get()
        })
        dialogue_data["conversations"].append({
            "from": "assistant",
            "assistant": assistant_entry.get()
        })
    
    # 把对话数据保存到JSON文件
    with open(json_file_path, 'w', encoding='utf-8') as json_file:
        json.dump(dialogue_data, json_file, ensure_ascii=False, indent=4)
 
    # 把图片文件保存到指定的文件夹
    if image_path and os.path.isfile(image_path):
        shutil.copy2(image_path, image_file_path)
    
    
    subprocess.Popen(["python", "test.py"])
    sys.exit()
 
 
 
 
root.mainloop()