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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

612閲覧

作ったGUIのページ表示機能を改善したい

fuji36_om

総合スコア8

Tkinter

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/24 13:23

前提・実現したいこと

現状:
No1~No3の人物の姓、名、性別、生年月日を表示するGUIを作り
最終的にNo10まで表示できるようにしました。

しかし、No1~No3が表示されている状態で前ボタンを押すと、No8~No10が表示され、
No10が表示されている状態で次ボタンを押すと、何も表示しなくなり、その後前ボタンを押しても表示されません。

実現したいこと:
No1~No3が表示されている場合は前ボタンが動かないように、
No10が表示されている場合は次ボタンが動かないようにしたい。

該当のソースコード

python

1#tkinterのインポート 2import tkinter as tk 3 4# ウィンドウを作成 5root = tk.Tk() 6root.title("Hello, World!") # タイトル 7root.geometry("500x300") # サイズ 8 9b = tk.Label(text="コントロール画面")# 文字の出力 10b.pack() 11 12#ボタン(前)_前ページを出力 13def btn_click1(): 14 global pageid 15 no[pageid] = txt_No11.get() 16 print(txt_No11.get()) 17 clear() 18 pageid-=3 19 hyoji(pageid) 20 21 22#ボタン(次)_次ページを出力 23def btn_click2(): 24 global pageid 25 no[pageid] = txt_No11.get() 26 print(txt_No11.get()) 27 clear() 28 pageid+=3 29 hyoji(pageid) 30 31def clear(): 32 txt_No11.delete(0, tk.END) 33 txt_No12.delete(0, tk.END) 34 txt_No13.delete(0, tk.END) 35 txt_No21.delete(0, tk.END) 36 txt_No22.delete(0, tk.END) 37 txt_No23.delete(0, tk.END) 38 txt_No31.delete(0, tk.END) 39 txt_No32.delete(0, tk.END) 40 txt_No33.delete(0, tk.END) 41 txt_No41.delete(0, tk.END) 42 txt_No42.delete(0, tk.END) 43 txt_No43.delete(0, tk.END) 44 txt_No51.delete(0, tk.END) 45 txt_No52.delete(0, tk.END) 46 txt_No53.delete(0, tk.END) 47 48def hyoji(index): 49 50 txt_No11.insert(tk.END,no[index]) 51 txt_No21.insert(tk.END,[index]) 52 txt_No31.insert(tk.END,[index]) 53 txt_No41.insert(tk.END,性別[index]) 54 txt_No51.insert(tk.END,生年月日[index]) 55 56 index +=1 57 txt_No12.insert(tk.END,no[index]) 58 txt_No22.insert(tk.END,[index]) 59 txt_No32.insert(tk.END,[index]) 60 txt_No42.insert(tk.END,性別[index]) 61 txt_No52.insert(tk.END,生年月日[index]) 62 63 index +=1 64 txt_No13.insert(tk.END,no[index]) 65 txt_No23.insert(tk.END,[index]) 66 txt_No33.insert(tk.END,[index]) 67 txt_No43.insert(tk.END,性別[index]) 68 txt_No53.insert(tk.END,生年月日[index]) 69 70 71# 各種ボタン設定 72button1 = tk.Button(root,text='前',command = btn_click1).place(width=50,x=300,y=250) 73button2 = tk.Button(root,text='次',command = btn_click2).place(width=50,x=375,y=250) 74 75#buttonX = tk.Button(root,text='リセットボタン',command = btn_clickX).place(x=75,y=250) 76 77# テキスト注釈を表示 78lbl_1 = tk.Label(text='No.') 79lbl_1.place(x=30, y=50) 80 81lbl_2 = tk.Label(text='姓') 82lbl_2.place(x=110, y=50) 83 84lbl_3 = tk.Label(text='名') 85lbl_3.place(x=220, y=50) 86 87lbl_4 = tk.Label(text='性別') 88lbl_4.place(x=330, y=50) 89 90lbl_5 = tk.Label(text='生年月日') 91lbl_5.place(x=400, y=50) 92 93# テキストボックス1(No) 94txt_No11 = tk.Entry(width=8) 95txt_No11.place(x=30, y=80) 96 97txt_No12 = tk.Entry(width=8) 98txt_No12.place(x=30, y=110) 99 100txt_No13 = tk.Entry(width=8) 101txt_No13.place(x=30, y=140) 102 103 104# テキストボックス2(姓) 105txt_No21 = tk.Entry(width=12) 106txt_No21.place(x=110, y=80) 107 108txt_No22 = tk.Entry(width=12) 109txt_No22.place(x=110, y=110) 110 111txt_No23 = tk.Entry(width=12) 112txt_No23.place(x=110, y=140) 113 114 115# テキストボックス3(名前) 116txt_No31 = tk.Entry(width=12) 117txt_No31.place(x=220, y=80) 118 119txt_No32 = tk.Entry(width=12) 120txt_No32.place(x=220, y=110) 121 122txt_No33 = tk.Entry(width=12) 123txt_No33.place(x=220, y=140) 124 125 126# テキストボックス4(性別) 127txt_No41 = tk.Entry(width=8) 128txt_No41.place(x=330, y=80) 129 130txt_No42 = tk.Entry(width=8) 131txt_No42.place(x=330, y=110) 132 133txt_No43 = tk.Entry(width=8) 134txt_No43.place(x=330, y=140) 135 136 137# テキストボックス5(生年月日) 138txt_No51 = tk.Entry(width=12) 139txt_No51.place(x=400, y=80) 140 141txt_No52 = tk.Entry(width=12) 142txt_No52.place(x=400, y=110) 143 144txt_No53 = tk.Entry(width=12) 145txt_No53.place(x=400, y=140) 146 147no = ["1","2","3","4","5","6","7","8","9","10"] 148= ["渡邊","柳川","清野","根本","阿部","稲田","木内","三宅","石村","本郷"] 149= ["沙樹","和臣","菜緒","駿斗","亜依","和徳","喜雄","美南","比呂","香帆"] 150性別 = ["女","男","女","男","女","男","男","女","男","女","男","女"] 151生年月日 = ["1988/07/15","1966/09/04","1979/06/08","1992/03/14","1977/04/04", 152 "1963/11/06","1972/08/21","1992/11/30","1967/12/07","1965/03/20"] 153pageid = 0 154hyoji(pageid) 155 156root.mainloop( )

試したこと

if 構文を色々考えて試しましたが、機能しないか、invalid syntaxだったので
添付したデータは削っています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

前/後ボタンでpageidを増減している処理に、pageidがインデックスとしての範囲外の値(負の値や、データの総数以上の値)にならないようにif文を組み込む。

Python

1def btn_click1(): 2 global pageid 3 (中略) 4 if pageid >= 3: 5 pageid -= 3 6 hyoji(pageid) 7 8def btn_click2(): 9 global pageid 10 (中略) 11 if pageid < len(no) - 3: 12 pageid += 3 13 hyoji(pageid)

ついでに、データを表示する処理に、インデックスとして範囲外の値だったときはデータにアクセスしないような処理を追加する(noが10のとき、残りの2つのウィジェットの表示で範囲外にアクセスするのを防ぐため)。

Python

1def hyoji(index): 2 if index >= len(no): 3 return 4 txt_No11.insert(tk.END, no[index]) 5 (中略) 6 7 index += 1 8 if index >= len(no): 9 return 10 txt_No12.insert(tk.END, no[index]) 11 (中略) 12 13 index += 1 14 if index >= len(no): 15 return 16 txt_No13.insert(tk.END, no[index]) 17 (中略)

付け加えると、ウィジェットの名前は、内容を想像できるようなものにしたほうがいい。

投稿2020/08/24 13:47

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問