以前のchatGPT3.5でもクイズアプリを作ってみたことがあります。
この記事を参照ください。
プログラミングは少しかじっていましたが、ほとんど素人ですのでchat GPTに完全に頼んで作ってもらいました。
印象としては、プログラムのコードに間違いがあって、何度もやり直しをしたことがあります。
そしてやり直しに時間がかかります。
プログラムにもっと詳しかったら、僅かなエラーを自分で修正するじゃらいいのだろうけど、詳しくない自分としてはエラーが多いと手詰まりになってしまいます。
Chat GPT4にすれば能力も向上するとのことでしたが、月額20ドルも払う必要があり躊躇していました。
code interpreterが使えるようになり、Chat GPT4でコードを読み取れるのが画期的とのことでしたが、よくわからんからどうでも良かったのです。
chatGPT4が無料になるまで待っとこかなと思っていました。
しかし、ファイルのアップとダウンロードもできると聞きました。
色々試せそう。笑
そんなことでChatGPT4 plusに課金してみた次第です。
それで今回もクイズアプリを作ったのですが、code interpreterを駆使してZIPファイルを用いで前回より非常に簡単に作れたので記載します。
一応GUIはchatGPT4でできなかったので自分の環境でコードを実行しています。
Chat GPTに入力する
このようにcode interpreterを選択していると、ファイルが添付できるようになります。
一つのファイルしかできないようですので、今回は画像を格納したファイルをZIPしてそれをアップロードしました。
季節に関する画像を使用しています。
Usernameは自分の名前です。
以下はコードです。
from tkinter import messagebox, PhotoImage
import random
import glob
import os
# Create a mapping of image paths to seasons based on the file names
image_to_season = {}
for season, keywords in {
‘Spring’: [‘cherry_blossom’, ‘Doll_FestivalGirls_Day’, ‘rose’],
‘Summer’: [‘Fireworks_Festival’, ‘seaswimanime’, ‘Shaved_Icejapan’, ‘carp_streameranime’, ‘sunflower’],
‘Autumn’: [‘Autumn_Leaves_Viewing’, ‘sunflower’],
‘Winter’: [‘SkiingSnowboarding’, ‘snow’, ‘Christmas’, ‘Mochi_Pounding’]
}.items():
for keyword in keywords:
for path in glob.glob(f’/Users/username/Desktop/季節/*{keyword}*.png’): # for MacOS or Linux
image_to_season[path] = season
# Create the main window
root = tk.Tk()
root.title(‘Season Quiz’)
# Load all the images
images = [PhotoImage(file=path) for path in image_to_season.keys()]
seasons = list(image_to_season.values())
# Function to display a new quiz question
def new_question():
global current_image, current_season
i = random.randrange(len(images))
current_image = images[i]
current_season = seasons[i]
img_label.config(image=current_image)
# Function to check the user’s answer
def check_answer(season):
if season == current_season:
messagebox.showinfo(‘Correct!’, ‘You guessed correctly!’)
else:
messagebox.showinfo(‘Incorrect’, f’Sorry, the correct answer was {current_season}.’)
new_question()
# Create widgets
img_label = tk.Label(root, image=None)
img_label.pack()
buttons = []
for season in [‘Spring’, ‘Summer’, ‘Autumn’, ‘Winter’]:
btn = tk.Button(root, text=season, command=lambda s=season: check_answer(s))
btn.pack()
buttons.append(btn)
# Initialize the first question and start the main loop
new_question()
root.mainloop()
コードを試すと・・・
画像はでてくるようになりました。
しかし選択肢は出てきません。
以前のchatGPT3.5ならここからが困っていました。
またコードを打ち直して何回かやり直しかー
めんどくさ笑ってなってたんですが、GPT4は画期的で感動です。
画像は出てくるようになったけど、答えの選択肢がないと入力すると、
GUIが表示されたときに答えの選択肢(ボタン)が表示されない場合、以下の可能性が考えられます:
ボタンが作成されていない:コードのこの部分が何らかの理由で実行されていない可能性があります。
ボタンが視覚的に見えない:ボタンは作成されているが、何らかの理由で画面上に表示されていない可能性があります。これは、ウィンドウのサイズ、ボタンの色、背景色などのGUIの視覚的な側面に関連している可能性があります。
ボタンが他のGUI要素に隠れている:他の要素(例えば、画像を表示するラベル)がボタンを覆っている可能性があります。
これらの問題を診断するためには、実行中のGUIのスクリーンショットや、問題が発生している状況についての詳細な説明など、より具体的な情報が必要となります。この情報を提供していただけますか?
実行中のGUIのスクリーンショットで判断出来んの?
早速やってみる。
画像をアップして修正箇所を特定してもらう
ここで先程の画像をアップしました。
すると、
ありがとうございます、スクリーンショットを見せていただくことで、問題の状況がより明確になりました。画像が表示されていることから、画像の読み込みと表示は正常に機能しているようです。しかし、期待されるボタンが表示されていないので、その部分に問題があるようです。
ウィジェットが.pack()または.grid()などのレイアウトマネージャによって配置されていない。しかし、あなたのコードでは各ボタンに対して.pack()が呼び出されているので、これは問題ではないように見えます。
ウィジェットが親ウィジェットに追加されていない、またはウィジェットの親が正しく設定されていない。しかし、あなたのコードでは各ボタンは直接ルートウィンドウに追加されているので、これも問題ではないようです。
ウィジェットが他のウィジェットに隠れている。しかし、あなたのコードでは画像ラベルとボタンは同じ親ウィジェットに直接追加されており、特に他のウィジェットによって隠れる理由はないようです。
ウィジェットが作成されていない、またはウィジェット作成のコードが何らかの理由でスキップされている。あなたのコードでは、ボタンはループの中で明示的に作成されています。
よくわかりませんが、勝手に解釈してくれて、新しいコードを描いてくれました。笑
それがこちら、
import tkinter as tk
from tkinter import messagebox, PhotoImage
import random
import glob
import os
# Create a mapping of image paths to seasons based on the file names
image_to_season = {}
for season, keywords in {
‘Spring’: [‘cherry_blossom’, ‘Doll_FestivalGirls_Day’, ‘rose’],
‘Summer’: [‘Fireworks_Festival’, ‘seaswimanime’, ‘Shaved_Icejapan’, ‘carp_streameranime’, ‘sunflower’],
‘Autumn’: [‘Autumn_Leaves_Viewing’, ‘sunflower’],
‘Winter’: [‘SkiingSnowboarding’, ‘snow’, ‘Christmas’, ‘Mochi_Pounding’]
}.items():
for keyword in keywords:
for path in glob.glob(f’/Users/username/Desktop/季節/*{keyword}*.png’): # for MacOS or Linux
image_to_season[path] = season
# Create the main window
root = tk.Tk()
root.title(‘Season Quiz’)
# Create the buttons first
buttons = []
for season in [‘Spring’, ‘Summer’, ‘Autumn’, ‘Winter’]:
btn = tk.Button(root, text=season, command=lambda s=season: check_answer(s))
btn.pack()
buttons.append(btn)
# Load all the images
images = [PhotoImage(file=path) for path in image_to_season.keys()]
seasons = list(image_to_season.values())
# Function to display a new quiz question
def new_question():
global current_image, current_season
i = random.randrange(len(images))
current_image = images[i]
current_season = seasons[i]
img_label.config(image=current_image)
# Function to check the user’s answer
def check_answer(season):
if season == current_season:
messagebox.showinfo(‘Correct!’, ‘You guessed correctly!’)
else:
messagebox.showinfo(‘Incorrect’, f’Sorry, the correct answer was {current_season}.’)
new_question()
# Create widgets
img_label = tk.Label(root, image=None)
img_label.pack()
# Initialize the first question and start the main loop
new_question()
root.mainloop()
これでこんな感じに仕上がりました。上に選択肢が出ています。
まとめ
Chat GPT PLUSにしてGPT4でcode interpreterを駆使して簡単なクイズアプリを作ってみました。
画像に関してはミッドジャーニー で作成しています。
ファイルをアップロードすることができる、パイソンが内蔵されたことで格段にできる事が増えた印象です。
個人的にはまだまだ試したいことがあるので、しばらくはplusのままにしておこうと思います。
明らかにplusの方が優秀です。
以前ならコードを書いてもらっても何回も何回もミスしていました。
初回はコードを読み取れませんでしたが、こちら側のディレクトリの設定が間違っていました。
非常に簡単になった印象です。
以上参考になれば幸いです。
コメント