作ったGUIのページ表示機能を改善したい
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 293
前提・実現したいこと
現状:
No1~No3の人物の姓、名、性別、生年月日を表示するGUIを作り
最終的にNo10まで表示できるようにしました。
しかし、No1~No3が表示されている状態で前ボタンを押すと、No8~No10が表示され、
No10が表示されている状態で次ボタンを押すと、何も表示しなくなり、その後前ボタンを押しても表示されません。
実現したいこと:
No1~No3が表示されている場合は前ボタンが動かないように、
No10が表示されている場合は次ボタンが動かないようにしたい。
該当のソースコード
#tkinterのインポート
import tkinter as tk
# ウィンドウを作成
root = tk.Tk()
root.title("Hello, World!") # タイトル
root.geometry("500x300") # サイズ
b = tk.Label(text="コントロール画面")# 文字の出力
b.pack()
#ボタン(前)_前ページを出力
def btn_click1():
global pageid
no[pageid] = txt_No11.get()
print(txt_No11.get())
clear()
pageid-=3
hyoji(pageid)
#ボタン(次)_次ページを出力
def btn_click2():
global pageid
no[pageid] = txt_No11.get()
print(txt_No11.get())
clear()
pageid+=3
hyoji(pageid)
def clear():
txt_No11.delete(0, tk.END)
txt_No12.delete(0, tk.END)
txt_No13.delete(0, tk.END)
txt_No21.delete(0, tk.END)
txt_No22.delete(0, tk.END)
txt_No23.delete(0, tk.END)
txt_No31.delete(0, tk.END)
txt_No32.delete(0, tk.END)
txt_No33.delete(0, tk.END)
txt_No41.delete(0, tk.END)
txt_No42.delete(0, tk.END)
txt_No43.delete(0, tk.END)
txt_No51.delete(0, tk.END)
txt_No52.delete(0, tk.END)
txt_No53.delete(0, tk.END)
def hyoji(index):
txt_No11.insert(tk.END,no[index])
txt_No21.insert(tk.END,性[index])
txt_No31.insert(tk.END,名[index])
txt_No41.insert(tk.END,性別[index])
txt_No51.insert(tk.END,生年月日[index])
index +=1
txt_No12.insert(tk.END,no[index])
txt_No22.insert(tk.END,性[index])
txt_No32.insert(tk.END,名[index])
txt_No42.insert(tk.END,性別[index])
txt_No52.insert(tk.END,生年月日[index])
index +=1
txt_No13.insert(tk.END,no[index])
txt_No23.insert(tk.END,性[index])
txt_No33.insert(tk.END,名[index])
txt_No43.insert(tk.END,性別[index])
txt_No53.insert(tk.END,生年月日[index])
# 各種ボタン設定
button1 = tk.Button(root,text='前',command = btn_click1).place(width=50,x=300,y=250)
button2 = tk.Button(root,text='次',command = btn_click2).place(width=50,x=375,y=250)
#buttonX = tk.Button(root,text='リセットボタン',command = btn_clickX).place(x=75,y=250)
# テキスト注釈を表示
lbl_1 = tk.Label(text='No.')
lbl_1.place(x=30, y=50)
lbl_2 = tk.Label(text='姓')
lbl_2.place(x=110, y=50)
lbl_3 = tk.Label(text='名')
lbl_3.place(x=220, y=50)
lbl_4 = tk.Label(text='性別')
lbl_4.place(x=330, y=50)
lbl_5 = tk.Label(text='生年月日')
lbl_5.place(x=400, y=50)
# テキストボックス1(No)
txt_No11 = tk.Entry(width=8)
txt_No11.place(x=30, y=80)
txt_No12 = tk.Entry(width=8)
txt_No12.place(x=30, y=110)
txt_No13 = tk.Entry(width=8)
txt_No13.place(x=30, y=140)
# テキストボックス2(姓)
txt_No21 = tk.Entry(width=12)
txt_No21.place(x=110, y=80)
txt_No22 = tk.Entry(width=12)
txt_No22.place(x=110, y=110)
txt_No23 = tk.Entry(width=12)
txt_No23.place(x=110, y=140)
# テキストボックス3(名前)
txt_No31 = tk.Entry(width=12)
txt_No31.place(x=220, y=80)
txt_No32 = tk.Entry(width=12)
txt_No32.place(x=220, y=110)
txt_No33 = tk.Entry(width=12)
txt_No33.place(x=220, y=140)
# テキストボックス4(性別)
txt_No41 = tk.Entry(width=8)
txt_No41.place(x=330, y=80)
txt_No42 = tk.Entry(width=8)
txt_No42.place(x=330, y=110)
txt_No43 = tk.Entry(width=8)
txt_No43.place(x=330, y=140)
# テキストボックス5(生年月日)
txt_No51 = tk.Entry(width=12)
txt_No51.place(x=400, y=80)
txt_No52 = tk.Entry(width=12)
txt_No52.place(x=400, y=110)
txt_No53 = tk.Entry(width=12)
txt_No53.place(x=400, y=140)
no = ["1","2","3","4","5","6","7","8","9","10"]
性 = ["渡邊","柳川","清野","根本","阿部","稲田","木内","三宅","石村","本郷"]
名 = ["沙樹","和臣","菜緒","駿斗","亜依","和徳","喜雄","美南","比呂","香帆"]
性別 = ["女","男","女","男","女","男","男","女","男","女","男","女"]
生年月日 = ["1988/07/15","1966/09/04","1979/06/08","1992/03/14","1977/04/04",
"1963/11/06","1972/08/21","1992/11/30","1967/12/07","1965/03/20"]
pageid = 0
hyoji(pageid)
root.mainloop( )
試したこと
if 構文を色々考えて試しましたが、機能しないか、invalid syntaxだったので
添付したデータは削っています。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
前/後ボタンでpageidを増減している処理に、pageidがインデックスとしての範囲外の値(負の値や、データの総数以上の値)にならないようにif文を組み込む。
def btn_click1():
global pageid
(中略)
if pageid >= 3:
pageid -= 3
hyoji(pageid)
def btn_click2():
global pageid
(中略)
if pageid < len(no) - 3:
pageid += 3
hyoji(pageid)
ついでに、データを表示する処理に、インデックスとして範囲外の値だったときはデータにアクセスしないような処理を追加する(noが10のとき、残りの2つのウィジェットの表示で範囲外にアクセスするのを防ぐため)。
def hyoji(index):
if index >= len(no):
return
txt_No11.insert(tk.END, no[index])
(中略)
index += 1
if index >= len(no):
return
txt_No12.insert(tk.END, no[index])
(中略)
index += 1
if index >= len(no):
return
txt_No13.insert(tk.END, no[index])
(中略)
付け加えると、ウィジェットの名前は、内容を想像できるようなものにしたほうがいい。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる