Python
1import tkinter as tk 2 3class App(tk.Tk):4 def __init__(self):5 super().__init__()6 self.geometry('800x600') # ウィンドウの初期サイズを設定7 8 # フレーム1をウィンドウ全体に広げる9 self.frame1 = tk.Frame(self, bg='white')10 self.frame1.pack(fill='both', expand=True)11 12 # フレーム2とフレーム3をフレーム1内に均等に左右に配置13 self.frame2 = tk.Frame(self.frame1, bg='red')14 self.frame3 = tk.Frame(self.frame1, bg='blue')15 self.frame2.pack(side='left', fill='both', expand=True)16 self.frame3.pack(side='right', fill='both', expand=True)17 18 # フレーム①をフレーム2内に上半分に配置19 # フレーム②と③をフレーム2内に下半分、左右に配置20 self.frame_1 = tk.Frame(self.frame2, bg='yellow')21 self.frame_2 = tk.Frame(self.frame2, bg='green')22 self.frame_3 = tk.Frame(self.frame2, bg='purple')23 self.frame2.grid_rowconfigure(0, weight=2) # フレーム①の高さを他のフレームの2倍に設定24 self.frame2.grid_rowconfigure(1, weight=1) # フレーム②と③の高さを設定25 self.frame2.grid_columnconfigure(0, weight=1)26 self.frame2.grid_columnconfigure(1, weight=1)27 self.frame_1.grid(row=0, column=0, columnspan=2, sticky='nsew')28 self.frame_2.grid(row=1, column=0, sticky='nsew')29 self.frame_3.grid(row=1, column=1, sticky='nsew')30 31 # フレーム3の中にフレーム④、⑤、⑥、⑦を配置32 self.frame3.grid_rowconfigure(0, weight=4) # フレーム④と⑤の高さを設定33 self.frame3.grid_rowconfigure(1, weight=3) # フレーム⑥の高さを設定34 self.frame3.grid_rowconfigure(2, weight=3) # フレーム⑦の高さを設定35 self.frame3.grid_columnconfigure(0, weight=1) # フレーム④の幅をフレーム⑤の半分に設定36 self.frame3.grid_columnconfigure(1, weight=2) # フレーム⑤の幅をフレーム④の2倍に設定37 38 self.frame_4 = tk.Frame(self.frame3, bg='orange')39 self.frame_5 = tk.Frame(self.frame3, bg='pink')40 self.frame_6 = tk.Frame(self.frame3, bg='brown')41 self.frame_7 = tk.Frame(self.frame3, bg='gray')42 43 self.frame_4.grid(row=0, column=0, sticky='nsew')44 self.frame_5.grid(row=0, column=1, sticky='nsew')45 self.frame_6.grid(row=1, column=0, columnspan=2, sticky='nsew')46 self.frame_7.grid(row=2, column=0, columnspan=2, sticky='nsew')47 48 49 50 51 self.create_widgets() # ウィジェット作成メソッドを呼び出す52 53 # ウィジェット作成メソッド。各種ウィジェットを作成します54 def create_widgets(self):55 # ラベルに表示するための文字列変数を作成56 self.h7seg = tk.StringVar()57 self.h7seg.set('0') # 初期値を0に設定58 59 # ラベルウィジェットを作成。文字列変数h7segの値を表示します60 self.label_h7seg = tk.Label(self.frame_1, textvariable=self.h7seg, bg='black', fg='white') # 背景を黒に、文字を白に設定61 self.label_h7seg.grid(row=0, column=0, sticky=tk.NSEW) # 画面サイズに合わせてウィジェットをリサイズ62 63 # ログ表示用のテキストウィジェットを作成64 self.log = tk.Text(self.frame_1, wrap="word", bg='black', fg='white',width=60, height=30) # 背景を黒に、文字を白に設定65 self.log.grid(row=1, column=0, sticky=tk.NSEW) # 画面サイズに合わせてウィジェットをリサイズ66 67 """# フレーム1内の行の均等なサイズ調整 68 self.frame_1.grid_rowconfigure(0, weight=1) 69 self.frame_1.grid_rowconfigure(1, weight=3) 70 """71 72 73 74 75 # ボタンウィジェットを作成。押すと変数の値が変わり、ランプの色も変わります76 self.button_SYUDO = tk.Button(self.frame_7, text="Push", command=self.change_h7seg, height=2, width=4) # ボタンのサイズを変更77 self.button_SYUDO.pack(expand=False) # 親ウィジェットがリサイズされても、子ウィジェットは固定の大きさを保つように設定78 79 # キャンバスウィジェットを作成。ランプを表示するために使います80 lamp_width = 4081 lamp_height = 4082 83 # ランプのキャンバス84 self.canvas = tk.Canvas(self.frame_4, bg='white', width=lamp_width, height=lamp_height) # 背景を黒に設定、サイズをランプと同じに85 self.canvas.pack() # キャンバスを配置86 # 初期のランプを作成(背景色と同じで枠線のみ白色)87 self.lamp = self.canvas.create_rectangle(3, 3, lamp_width, lamp_height, fill='black', outline='white') # ランプを作成し、IDを取得88 89 90 91 # ボタンが押されたときに実行するメソッド92 def change_h7seg(self):93 # 変数の値が0なら1に変更し、ランプを赤に。変数の値が1なら0に変更し、ランプを黒にします94 if self.h7seg.get() == '0':95 self.h7seg.set('1')96 self.canvas.itemconfig(self.lamp, fill='red') # ランプの色を赤に変更97 self.log.insert(tk.END, "Variable changed to 1\n")98 else:99 self.h7seg.set('0')100 self.canvas.itemconfig(self.lamp, fill='black') # ランプの色を黒に変更101 self.log.insert(tk.END, "Variable changed to 0\n")102 103if __name__ == '__main__':104 app = App()105 app.mainloop()106

0 コメント