Python

Pythonのゲームの作り方を書いていきます!

3DモデルAIを作成中。下のURLからファイルをダウンロードできます。

https://drive.google.com/file/d/104N806Q81EaZ3EV9aM5lBjFSxyZ4oX4C/view?usp=sharing

言語作成中。メモをする。

F5を押してデバッグ用VSコードウィンドウ表示

色の割り当てコード書き方 name

スコープ
コメント# コメントcomment.line.number-sign.mylang緑 #00FF00
演算子+ – * /keyword.operator.mylang赤 #FF0000
数字123constant.numeric.mylang青 #0000FF
キーワードif, else, forkeyword.control.mylang紫 #800080
文字列“Hello”string.quoted.double.mylangオレンジ #FFA500
関数名print()entity.name.function.mylang水色 #00CED1

色の割り当てコードの書き方 match

タイプmatch(正規表現)説明
コメント# コメント#.*$# で始まる行全体をマッチ
コメント/ コメント/.*$/ で始まる行全体をマッチ
演算子+ - * /`\+\-
数字(整数)123\\b\\d+\\b単語境界内の整数にマッチ
数字(小数含む)3.14\\b\\d+(\\.\\d+)?\\b整数または小数にマッチ
キーワードif, else, for`\b(ifelse
文字列"Hello""\".*?\""ダブルクォート内の文字列にマッチ(最短マッチ)
関数名print()\\b[a-zA-Z_][a-zA-Z0-9_]*\\s*(?=\\()後ろに ( がある単語(関数名)にマッチ

色の割り当てコードの書き方 fontStyle

説明
"italic"斜体にする
"bold"太字にする
"underline"下線を付ける
"bold italic"太字+斜体
空文字 ("")標準の文字

色の割り当てコードの書き方 foreground

foreground の書き方
"#FF0000"
"#00FF00"
"#0000FF"
"#800080"
オレンジ"#FFA500"
水色"#00CED1"

サンプルコード

{
	"editor.tokenColorCustomizations": {
	  "textMateRules": [
		{
		  "scope": "comment.line.slash.mylang",
		  "settings": {
			"foreground": "#00FF00",
			"fontStyle": "italic"
		  }
		},
		{
		  "scope": "constant.numeric.mylang",
		  "settings": {
			"foreground": "#0000FF"
		  }
		},
		{
		  "scope": "keyword.operator.mylang",
		  "settings": {
			"foreground": "#FF0000"
		  }
		},
		{
		  "scope": "punctuation.parenthesis.mylang",
		  "settings": {
			"foreground": "#800080"
		  }
		}
	  ]
	}
  }
  

Tkinterについて

=============================================================================

Tkinterライブラリ読み込み

=============================================================================

import tkinter
from tkinter import messagebox

=============================================================================

ウィンドウの作成と基本設定

=============================================================================

ウィンドウ作成と、Tkinterオブジェクト取得

window = tkinter.Tk()

ウィンドウにタイトルを設定

window.title("Tkinterを使ってみましょう!!")

ウィンドウのサイズと位置を設定

geometry("<横幅>x<高さ>++")

window.geometry("900x600+0+0")

ウィンドウの背景色を設定

window.config(bg="#FFDDDD")

ウィンドウの透明度を設定

window.attributes("-alpha", 0.7)

ウィンドウのアイコンを設定

window.iconbitmap(r"note_icon.ico")

App Essentials の Design Shots (16 アイコン)で見れる

拡張子が「ico」になっているものだけ

ウィンドウのサイズ変更を禁止

window.resizable(False, False) # 幅、高さの両方を固定

window.resizable(True, False) # 幅のみ変更可能

=============================================================================

ウインドウのサイズと座標を取得

=============================================================================

window.update_idletasks() # mainloopの前に設定値の更新 必ず入れる

ウィンドウ全体の情報を取得

print("ウィンドウのサイズと座標:", window.winfo_geometry())

ウインドウサイズだけ取得

print("ウィンドウの横幅:", window.winfo_width())
print("ウィンドウの高さ:", window.winfo_height())

ウインドウの座標だけを取得

print("親ウィンドウのx座標:", window.winfo_x())
print("親ウィンドウのy座標:", window.winfo_y())
print("ディスプレイ上のx座標:", window.winfo_rootx())
print("ディスプレイ上のy座標:", window.winfo_rooty())

=============================================================================

ラベル(Label)- 文字や画像を表示

=============================================================================

基本的なラベル

label1 = tkinter.Label(window, text="これはラベルです")
label1.pack()

オプション付きラベル

label2 = tkinter.Label(
window,
text="装飾されたラベル",
font=("メイリオ", 16, "bold"), # フォント名、サイズ、スタイル
fg="blue", # 文字色
bg="yellow", # 背景色
width=20, # 幅(文字数)
height=2, # 高さ(行数)
relief="ridge", # 枠のスタイル
bd=3 # 枠の太さ
)
label2.pack()

relief オプション:flat, raised, sunken, groove, ridge

=============================================================================

ボタン(Button)- クリック可能なボタン

=============================================================================

クリック時に実行される関数を定義

def button_click():
print("ボタンがクリックされました!")
messagebox.showinfo("通知", "ボタンがクリックされました!")

基本的なボタン

btn1 = tkinter.Button(window, text="【 1 】", command=button_click)
btn1.pack()

オプション付きボタン

btn2 = tkinter.Button(
window,
text="装飾されたボタン",
font=("游ゴシック", 14),
fg="white", # 文字色
bg="#4CAF50", # 背景色
activeforeground="yellow", # クリック時の文字色
activebackground="#45a049", # クリック時の背景色
width=15, # 幅
height=2, # 高さ
relief="raised", # 枠のスタイル
bd=3, # 枠の太さ
command=button_click
)
btn2.pack(pady=10) # 上下に余白を追加

ボタンの有効/無効を切り替え

def toggle_button():
if btn2["state"] == "normal":
btn2["state"] = "disabled" # 無効化
else:
btn2["state"] = "normal" # 有効化

btn3 = tkinter.Button(window, text="ボタンの有効/無効", command=toggle_button)
btn3.pack()

=============================================================================

エントリー(Entry)- 1行の文字入力

=============================================================================

基本的なエントリー

entry1 = tkinter.Entry(window)
entry1.pack()

入力された値を取得する関数

def get_entry_value():
value = entry1.get()
print("入力された値:", value)
messagebox.showinfo("入力値", f"入力された値: {value}")

btn_entry = tkinter.Button(window, text="入力値を取得", command=get_entry_value)
btn_entry.pack()

オプション付きエントリー

entry2 = tkinter.Entry(
window,
font=("メイリオ", 12),
width=30,
bg="#f0f0f0",
fg="black",
relief="solid",
bd=2
)
entry2.pack(pady=5)
entry2.insert(0, "初期値を設定") # 初期値を設定

パスワード入力用エントリー(文字を隠す)

entry_password = tkinter.Entry(window, show="*", width=30)
entry_password.pack(pady=5)

=============================================================================

テキスト(Text)- 複数行の文字入力

=============================================================================

基本的なテキストウィジェット

text1 = tkinter.Text(
window,
width=40,
height=5,
font=("メイリオ", 10),
bg="white",
fg="black",
relief="solid",
bd=1
)
text1.pack(pady=10)

テキストに初期値を設定

text1.insert("1.0", "ここに複数行のテキストを\n入力できます。")

テキストの内容を取得する関数

def get_text_value():
value = text1.get("1.0", "end-1c") # "1.0"=先頭、"end-1c"=最後(改行除く)
print("入力されたテキスト:", value)
messagebox.showinfo("テキスト", value)

btn_text = tkinter.Button(window, text="テキストを取得", command=get_text_value)
btn_text.pack()

=============================================================================

チェックボタン(Checkbutton)- チェックボックス

=============================================================================

チェック状態を保存する変数

check_var1 = tkinter.BooleanVar()
check_var2 = tkinter.BooleanVar()

check1 = tkinter.Checkbutton(
window,
text="オプション1",
variable=check_var1,
font=("メイリオ", 10)
)
check1.pack()

check2 = tkinter.Checkbutton(
window,
text="オプション2",
variable=check_var2,
font=("メイリオ", 10)
)
check2.pack()

チェック状態を取得する関数

def get_check_values():
print("オプション1:", check_var1.get())
print("オプション2:", check_var2.get())
msg = f"オプション1: {check_var1.get()}\nオプション2: {check_var2.get()}"
messagebox.showinfo("チェック状態", msg)

btn_check = tkinter.Button(window, text="チェック状態を取得", command=get_check_values)
btn_check.pack()

=============================================================================

ラジオボタン(Radiobutton)- 選択肢から1つ選択

=============================================================================

選択された値を保存する変数

radio_var = tkinter.IntVar()
radio_var.set(1) # 初期選択

radio1 = tkinter.Radiobutton(
window,
text="選択肢1",
variable=radio_var,
value=1,
font=("メイリオ", 10)
)
radio1.pack()

radio2 = tkinter.Radiobutton(
window,
text="選択肢2",
variable=radio_var,
value=2,
font=("メイリオ", 10)
)
radio2.pack()

radio3 = tkinter.Radiobutton(
window,
text="選択肢3",
variable=radio_var,
value=3,
font=("メイリオ", 10)
)
radio3.pack()

選択された値を取得する関数

def get_radio_value():
value = radio_var.get()
print("選択された値:", value)
messagebox.showinfo("選択値", f"選択された値: {value}")

btn_radio = tkinter.Button(window, text="選択値を取得", command=get_radio_value)
btn_radio.pack()

=============================================================================

リストボックス(Listbox)- リストから選択

=============================================================================

listbox1 = tkinter.Listbox(
window,
width=30,
height=5,
font=("メイリオ", 10),
selectmode="single" # single=1つ選択、multiple=複数選択
)
listbox1.pack(pady=10)

リストに項目を追加

items = ["りんご", "バナナ", "オレンジ", "ぶどう", "いちご"]
for item in items:
listbox1.insert("end", item)

選択された項目を取得する関数

def get_listbox_value():
selection = listbox1.curselection()
if selection:
value = listbox1.get(selection[0])
print("選択された項目:", value)
messagebox.showinfo("選択項目", f"選択された項目: {value}")

btn_listbox = tkinter.Button(window, text="選択項目を取得", command=get_listbox_value)
btn_listbox.pack()

=============================================================================

スケール(Scale)- スライダー

=============================================================================

scale1 = tkinter.Scale(
window,
from_=0, # 最小値
to=100, # 最大値
orient="horizontal", # horizontal=横、vertical=縦
length=300,
label="音量",
font=("メイリオ", 10)
)
scale1.pack(pady=10)

スケールの値を取得する関数

def get_scale_value():
value = scale1.get()
print("スケールの値:", value)
messagebox.showinfo("スケール値", f"スケールの値: {value}")

btn_scale = tkinter.Button(window, text="スケール値を取得", command=get_scale_value)
btn_scale.pack()

=============================================================================

ウィジェットの配置方法

=============================================================================

1. pack メソッド - 順番に配置

"""
btn1.pack()
btn2.pack(side=tkinter.LEFT) # 左から配置
btn3.pack(side=tkinter.TOP) # 上から配置
btn4.pack(side=tkinter.RIGHT) # 右から配置
btn5.pack(side=tkinter.BOTTOM) # 下から配置
btn6.pack(padx=10, pady=10) # 余白を追加
"""

2. grid メソッド - 格子状に配置

"""
label1.grid(row=0, column=0) # 0行0列
entry1.grid(row=0, column=1) # 0行1列
btn1.grid(row=1, column=0, columnspan=2) # 2列分の幅
"""

3. place メソッド - 座標で配置

"""
btn1.place(x=100, y=50) # x=100, y=50の位置に配置
btn2.place(relx=0.5, rely=0.5, anchor="center") # 中央に配置
"""

=============================================================================

メッセージボックス

=============================================================================

情報表示

messagebox.showinfo("タイトル", "メッセージ")

警告表示

messagebox.showwarning("警告", "これは警告です")

エラー表示

messagebox.showerror("エラー", "エラーが発生しました")

はい/いいえ

result = messagebox.askyesno("確認", "実行しますか?")

OK/キャンセル

result = messagebox.askokcancel("確認", "続行しますか?")

リトライ/キャンセル

result = messagebox.askretrycancel("エラー", "再試行しますか?")

=============================================================================

ウィンドウのループ処理

=============================================================================

このループでウィンドウが表示され続ける

window.mainloop()