質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

解決済

エラー文の読み方が分からない、また、文法がどう間違っているのか、ご教授いただきたい。

threeeverytwo
threeeverytwo

総合スコア49

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

2回答

-6評価

0クリップ

8098閲覧

投稿2018/03/07 18:59

編集2018/03/08 08:56

前提・実現したいこと

文法ミスがなぜ起こっているのか理解したい。

###参考サイト
https://pythonprogramming.net/change-show-new-frame-tkinter/

発生している問題・エラーメッセージ

frame = F(container, self) ← このコードにエラー文がでるのだが、間違っている理由が、分からない。

該当のソースコード

python

# -*- coding: utf-8 -*- #========================================================================= # ライブラリ #========================================================================= # GUIを扱う import tkinter as tk # tkinterよりデザインが良くなる from tkinter import ttk #========================================================================= # クラス定義 #========================================================================= #------------------------------------------------------------------------- # メインクラス (継承 : tk.Tk) #------------------------------------------------------------------------- class WordPracticeApp(tk.Tk): #--- コンストラクタ def __init__(self, *args, **kwargs): # 初期化 tk.Tk.__init__(self, *args, **kwargs) # コンテナのフレームを生成 container = tk.Frame(self) # コンテナ配置 container.pack(side="top", fill="both", expand=True) # コンテナのグリッドを 1x1 にする container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) # フレームを格納する配列 self.frames = {} # ページを格納する配列 pages = ( StartPage, InputNamePage, OptionSelectPage ) # それぞれのページに対して for F in pages: # フレームを生成 frame = F(container, self) # フレームを格納 self.frames[F] = frame # フレームを配置 frame.grid(row=0, column=0, sticky="nsew") # スタートページを表示 self.show_frame(StartPage) #--- フレームを表示 def show_frame(self, cont): # WordPracticeAppのcontのフレームを格納 frame = self.frames[cont] # そのフレームを上位層へ frame.tkraise() #------------------------------------------------------------------------- # スタートページクラス (継承 : tk.Frame) #------------------------------------------------------------------------- class StartPage(tk.Frame): #--- コンストラクタ def __init__(self, parent, contoroller): # 初期化 tk.Frame.__init__(self, parent) ### タイトル表示 #--- ラベル生成 # 空白 spaceLabel1 = [tk.Label(self, text="") for column in range(10)] spaceLabel2 = [tk.Label(self, text="") for column in range(3)] # タイトル titleLabelFont = ("Helevetice", 32, "bold") titleLabel = ttk.Label(self,\ text="WORDPRACTICE",\ font=titleLabelFont) #--- ラベル配置 # 空白 for index in range(10): spaceLabel1[index].pack() # タイトル titleLabel.pack() ### ボタン表示 #--- ボタン生成 startButton =\ ttk.Button( self, text=" Start ",\ command=lambda : controller.show_frame(InputNamePage) ) #--- ボタン配置 # 空白 for index in range(3): spaceLabel2[index].pack() # ボタン startButton.pack() #------------------------------------------------------------------------- # 名前入力ページクラス (継承 : tk.Frame) #------------------------------------------------------------------------- class InputNamePage(tk.Frame): #--- コンストラクタ def _init__(self, parent, controller): # 初期化 tk.Frame.__init__(self, parent) ### タイトル表示 #--- ラベル生成 # 空白 spaceLabel1 = [tk.Label(self, text="") for column in range(5)] # タイトル titleLabelFont = ("Helevetice", 18) titleLabel =\ ttk.Label(self,\ text="ユーザー名を入力してください。",\ font=titleLabelFont) #--- ラベル配置 # 空白 for index in range(5): spaceLabel1[index].pack() # タイトル titleLabel.pack() ### フレーム表示 #--- フレーム生成 frame = ttk.Frame(self) #--- フレーム配置 frame.pack() ### ユーザー名入力表示 #--- ラベル生成 # 空白 spaceLabel2 = [tk.Label(frame, text="") for column in range(3)] # ユーザー名 userNameLabelFont = ("Helevetice", 14) userNameLabel =\ ttk.Label(frame, text="ユーザー名:", font=userNameLabelFont) #--- ラベル配置 # 空白 for index in range(3): spaceLabel2[index].grid(row=index, column=0) # ユーザー名 userNameLabel.grid(row=4, column=0) #--- エントリー生成 userName = tk.StringVar() userNameEntry = ttk.Entry(frame, textvariable=userName, width=30) #--- エントリー配置 userNameEntry.grid(row=4, column=1) ### ボタン表示 #--- ボタン生成 okButton = ttk.Button( frame, text=" OK ",\ command=lambda :\ controller.show_frame(OptionSelectPage) ) #--- ボタン配置 okButton.grid(row=4, column=3) #------------------------------------------------------------------------- # 問題形式選択ページクラス (継承 : tk.Frame) #------------------------------------------------------------------------- class OptionSelectPage(tk.Frame): #--- コンストラクタ def _init__(self, parent, controller): # 初期化 tk.Frame.__init__(self, parent) ### タイトル表示 #--- ラベル生成 # 空白 spaceLabel1 = [tk.Label(self, text="") for column in range(5)] # タイトル titleLabelFont = ("Helevetice", 18) titleLabel =\ ttk.Label(self,\ text="問題形式を選択してください。",\ font=titleLabelFont) #--- ラベル配置 # 空白 for index in range(5): spaceLabel1[index].pack() # タイトル titleLabel.pack() #========================================================================= # 本体処理 #========================================================================= application = WordPracticeApp() app.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

退会済みユーザー

退会済みユーザー

2018/03/08 00:49

エラーのスタックとレースは残しておいてください。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。