前提・実現したいこと
文法ミスがなぜ起こっているのか理解したい。
###参考サイト
https://pythonprogramming.net/change-show-new-frame-tkinter/
発生している問題・エラーメッセージ
frame = F(container, self) ← このコードにエラー文がでるのだが、間違っている理由が、分からない。
該当のソースコード
python
1# -*- coding: utf-8 -*- 2 3#========================================================================= 4# ライブラリ 5#========================================================================= 6# GUIを扱う 7import tkinter as tk 8# tkinterよりデザインが良くなる 9from tkinter import ttk 10 11#========================================================================= 12# クラス定義 13#========================================================================= 14#------------------------------------------------------------------------- 15# メインクラス (継承 : tk.Tk) 16#------------------------------------------------------------------------- 17class WordPracticeApp(tk.Tk): 18 19 #--- コンストラクタ 20 def __init__(self, *args, **kwargs): 21 22 # 初期化 23 tk.Tk.__init__(self, *args, **kwargs) 24 25 # コンテナのフレームを生成 26 container = tk.Frame(self) 27 28 # コンテナ配置 29 container.pack(side="top", fill="both", expand=True) 30 31 # コンテナのグリッドを 1x1 にする 32 container.grid_rowconfigure(0, weight=1) 33 container.grid_columnconfigure(0, weight=1) 34 35 # フレームを格納する配列 36 self.frames = {} 37 38 # ページを格納する配列 39 pages = ( 40 StartPage, 41 InputNamePage, 42 OptionSelectPage 43 ) 44 45 # それぞれのページに対して 46 for F in pages: 47 # フレームを生成 48 frame = F(container, self) 49 50 # フレームを格納 51 self.frames[F] = frame 52 53 # フレームを配置 54 frame.grid(row=0, column=0, sticky="nsew") 55 56 57 # スタートページを表示 58 self.show_frame(StartPage) 59 60 61 #--- フレームを表示 62 def show_frame(self, cont): 63 64 # WordPracticeAppのcontのフレームを格納 65 frame = self.frames[cont] 66 67 # そのフレームを上位層へ 68 frame.tkraise() 69 70 71#------------------------------------------------------------------------- 72# スタートページクラス (継承 : tk.Frame) 73#------------------------------------------------------------------------- 74class StartPage(tk.Frame): 75 76 #--- コンストラクタ 77 def __init__(self, parent, contoroller): 78 79 # 初期化 80 tk.Frame.__init__(self, parent) 81 82 ### タイトル表示 83 #--- ラベル生成 84 # 空白 85 spaceLabel1 = [tk.Label(self, text="") for column in range(10)] 86 spaceLabel2 = [tk.Label(self, text="") for column in range(3)] 87 # タイトル 88 titleLabelFont = ("Helevetice", 32, "bold") 89 titleLabel = ttk.Label(self,\ 90 text="WORDPRACTICE",\ 91 font=titleLabelFont) 92 93 #--- ラベル配置 94 # 空白 95 for index in range(10): 96 spaceLabel1[index].pack() 97 # タイトル 98 titleLabel.pack() 99 100 ### ボタン表示 101 #--- ボタン生成 102 startButton =\ 103 ttk.Button( self, text=" Start ",\ 104 command=lambda : controller.show_frame(InputNamePage) ) 105 106 #--- ボタン配置 107 # 空白 108 for index in range(3): 109 spaceLabel2[index].pack() 110 # ボタン 111 startButton.pack() 112 113 114 115#------------------------------------------------------------------------- 116# 名前入力ページクラス (継承 : tk.Frame) 117#------------------------------------------------------------------------- 118class InputNamePage(tk.Frame): 119 120 #--- コンストラクタ 121 def _init__(self, parent, controller): 122 123 # 初期化 124 tk.Frame.__init__(self, parent) 125 126 ### タイトル表示 127 #--- ラベル生成 128 # 空白 129 spaceLabel1 = [tk.Label(self, text="") for column in range(5)] 130 # タイトル 131 titleLabelFont = ("Helevetice", 18) 132 titleLabel =\ 133 ttk.Label(self,\ 134 text="ユーザー名を入力してください。",\ 135 font=titleLabelFont) 136 137 #--- ラベル配置 138 # 空白 139 for index in range(5): 140 spaceLabel1[index].pack() 141 # タイトル 142 titleLabel.pack() 143 144 145 ### フレーム表示 146 #--- フレーム生成 147 frame = ttk.Frame(self) 148 #--- フレーム配置 149 frame.pack() 150 151 152 ### ユーザー名入力表示 153 #--- ラベル生成 154 # 空白 155 spaceLabel2 = [tk.Label(frame, text="") for column in range(3)] 156 157 # ユーザー名 158 userNameLabelFont = ("Helevetice", 14) 159 userNameLabel =\ 160 ttk.Label(frame, text="ユーザー名:", font=userNameLabelFont) 161 162 #--- ラベル配置 163 # 空白 164 for index in range(3): 165 spaceLabel2[index].grid(row=index, column=0) 166 # ユーザー名 167 userNameLabel.grid(row=4, column=0) 168 169 #--- エントリー生成 170 userName = tk.StringVar() 171 userNameEntry = ttk.Entry(frame, textvariable=userName, width=30) 172 173 #--- エントリー配置 174 userNameEntry.grid(row=4, column=1) 175 176 177 ### ボタン表示 178 #--- ボタン生成 179 okButton = ttk.Button( frame, text=" OK ",\ 180 command=lambda :\ 181 controller.show_frame(OptionSelectPage) ) 182 183 #--- ボタン配置 184 okButton.grid(row=4, column=3) 185 186 187#------------------------------------------------------------------------- 188# 問題形式選択ページクラス (継承 : tk.Frame) 189#------------------------------------------------------------------------- 190class OptionSelectPage(tk.Frame): 191 192 #--- コンストラクタ 193 def _init__(self, parent, controller): 194 195 # 初期化 196 tk.Frame.__init__(self, parent) 197 198 ### タイトル表示 199 #--- ラベル生成 200 # 空白 201 spaceLabel1 = [tk.Label(self, text="") for column in range(5)] 202 # タイトル 203 titleLabelFont = ("Helevetice", 18) 204 titleLabel =\ 205 ttk.Label(self,\ 206 text="問題形式を選択してください。",\ 207 font=titleLabelFont) 208 209 #--- ラベル配置 210 # 空白 211 for index in range(5): 212 spaceLabel1[index].pack() 213 # タイトル 214 titleLabel.pack() 215 216 217 218#========================================================================= 219# 本体処理 220#========================================================================= 221application = WordPracticeApp() 222app.mainloop() 223
エラーのスタックとレースは残しておいてください。
回答2件
あなたの回答
tips
プレビュー