python

챗gpt 전체소스

다만사 2023. 11. 22. 14:30
import tkinter as tk
from io import BytesIO
from tkinter import ttk
import openai
import os
import requests
from PIL import Image, ImageTk

API_KEY = os.environ.get('OPENAI_API_KEY')
openai.api_key = API_KEY

def generateImage(animal1, animal2, scenario):
response = openai.Image.create(
model='dall-e-3',
#prompt=f"cartoon image of a {animal1} and a {animal2} discussing {scenario}",
prompt=f"{animal1}() {animal2}() {scenario}에서 이야기하고 있는 카툰 이미지",
n=1,
size="1024x1024",
response_format="url"
)

image_url = response.data[0]["url"]
return image_url

def update_label_with_new_image(label, photo):
label.config(image=photo)
label.image = photo

def display_image_from_url(image_holder, url):
response = requests.get(url)
image_data = BytesIO(response.content)

image = Image.open(image_data)
photo = ImageTk.PhotoImage(image)

update_label_with_new_image(image_holder, photo)


def submit():
animal1 = combo1.get()
animal2 = combo2.get()
scenario = entry_box.get()
# 사자와 판다사이에 각각의 동물이 서로 말을 주고받는 10줄의 연극대본을 작성하여라. 작성할 시나리오는 다음과 같다. 그들이 만나는 장소: 스타벅스
# prompt = f"Create a play between a {animal1} and a {animal2} with 10 lines of dialog with each animal taking " \
# f"turns to speak. Hear the scenario in which they will engage: {scenario}\n";
prompt = f"{animal1}() {animal2}사이에 각각의 동물이 서로 말을 주고받는 10줄의 연극대본을 작성하여라. 작성할 시나리오는 다음과 같다. 그들이 만나는 장소: {scenario}\n"


messages = [{'role': 'user', 'content': prompt}]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages = messages,
temperature=0.8,
presence_penalty=0.6,
)

chatGPTAnswer = response["choices"][0]["message"]["content"]
print(chatGPTAnswer)

result_text.config(state="normal")
result_text.delete(1.0, tk.END) # Clear any previous results
# result_text.insert(tk.END, f"Animal 1: {animal1}\n")
# result_text.insert(tk.END, f"Animal 2: {animal2}\n")
# result_text.insert(tk.END, f"Discussion scenario: {scenario}\n")
result_text.insert(tk.END, chatGPTAnswer)
result_text.config(state="disabled")

image_url = generateImage(animal1, animal2, scenario)
display_image_from_url(image_holder, image_url)

app = tk.Tk()
app.title("Animal Discussion Scenario")

# Label and ComboBox for the first animal
label1 = ttk.Label(app, text="Select Animal 1:")
label1.grid(column=0, row=0, padx=10, pady=5)
combo1 = ttk.Combobox(app, values=["사자", "코끼리", "기린", "캥거루", "판다"])
combo1.grid(column=1, row=0, padx=10, pady=5)
combo1.set("사자")

#Label and ComboBox for the second animal
label2 = ttk.Label(app, text="Select Animal 2:")
label2.grid(column=0, row=1, padx=10, pady=5)
combo2 = ttk.Combobox(app, values=["사자", "코끼리", "기린", "캥거루", "판다"])
combo2.grid(column=1, row=1, padx=10, pady=5)
combo2.set("코끼리")

# Label and Entry for entering the discussion scenario
label3 = ttk.Label(app, text="Enter Discussion Scenario:")
label3.grid(column=0, row=2, padx=10, pady=5)
entry_box = ttk.Entry(app, width=30)
entry_box.grid(column=1, row=2, padx=10, pady=5)

# Button to submit the details
submit_btn = ttk.Button(app, text="Submit", command=submit)
submit_btn.grid(column=1, row=3, padx=10, pady=20)

# scrollbar
scrollbar = tk.Scrollbar(app)
scrollbar.grid(row=4, column=3, sticky='ns')

# Text widget to display results
result_text = tk.Text(app, width=40, height=10, wrap=tk.WORD, yscrollcommand=scrollbar.set)
result_text.grid(column=0, row=4, columnspan=2, padx=10, pady=10)

scrollbar.config(command=result_text.yview)

image_holder = tk.Label(app)
image_holder.grid(column=0, row=5, columnspan=4, padx=10, pady=10)

app.mainloop()