この記事も3ページ目になりました。
そこで、1ページ目と2ページ目以降のURLを比較してみると、
https://bliss-growth.com/python_tkinter/
https://bliss-growth.com/python_tkinter/2/
https://bliss-growth.com/python_tkinter/3/
「2/」「3/」のような連番を付ければ良いようです。
ということで、今回のカスタマイズのテーマは「複数ページのリンクを表示する」です。
複数ページのリンクを表示する
さて、2ページ目以降のURLを、単純にコピペ&手作業で作っていくのでは面白くありません。
今後、このシリーズでページがどんどん増えて、何ページになるかわかりませんよ。
forループでページ数の連番を追加する処理
はい。for ループを回していきましょう。
max_page = 3
for index in range(1,max_page + 1):
if index == 1: #1ページ目
links=[link]
else: #2ページ目以降
page = str(index) + '/'
links.append(link + page)
連番を後ろ付けてリストに追加していく for ループを書いてみました。
1ページ目の links=[link] という処理で「links」はリスト型で定義されるので、2ページ目以降の処理で、links.append(URL + page) で、各ページURLの文字列をリストに追加していくわけです。
こうしておけば、「max_page = 3」の数字を書き換えるだけで、何ページでも対応可能ですね。
リストにしたURLをlistboxで表示してみよう!
# リストボックスの作成
link_font=("Arial",14,"underline")
var_list = tkinter.StringVar(value=links) #links リストを丸ごと渡す
listbox = tkinter.Listbox(root,width=36,listvariable=var_list,height=0,fg='#0080ff',font=link_font, justify="center",cursor='hand2')
listbox.pack(expand = True)
listbox.bind('<<ListboxSelect>>',submit)
StringVar という、動作(ボタンのクリックや文字の入力など)に連動して、値(数値や文字列)を変更したい場合に使われる変数が用意されてますが、今回は「links リスト」をStringVar に丸ごと渡して var_list という変数に入れ、それを listbox の listvariable=var_list としています。
「まあ、よくわからなくても、こうやたらそのままリストを渡せるんだ」と理解して使ってください。
リストボックスのどこかの行を選択すると、<<ListboxSelect>>イベントが発生し、submit 関数が呼ばれます。
submit 関数のカスタマイズ
submit 関数も、リストボックスの選択行によって、開くページを変えるように処理をカスタマイズする必要がありますね。
#関数の定義
def submit(event):
# 選択行のインデックス取得
index = event.widget.curselection()
target = event.widget.get(index)
webbrowser.open_new(target)
event.widget.curselection() で選択行のインデックスが取得できますね。
また、event.widget.get(index) で選択行の文字列(URL)が取得できます。
あとの処理は同じですね。
今回のカスタマイズした全コード
import tkinter
import webbrowser
import configparser
import codecs
# ウィンドウの作成
root = tkinter.Tk()
root.title('python×tkinterでGUI作成')
root.geometry('500x200')
root.resizable(1, 1)
root.config(bg='LightSteelBlue1')
root.attributes("-topmost", True) #常に前面に表示
#このぺーじのリンク
link = 'https://bliss-growth.com/python_tkinter/'
max_page = 3
for index in range(1,max_page + 1):
if index == 1: #1ページ目
links=[link]
else: #2ページ目以降
page = str(index) + '/'
links.append(link + page)
#関数の定義
def submit(event):
# 選択行のインデックス取得
index = event.widget.curselection()
target = event.widget.get(index)
webbrowser.open_new(target)
# ラベルの作成
label01 = tkinter.Label(root, text='よなをブログ')
label01.pack()
label02 = tkinter.Label(root, text='【python】作りながら覚えるデスクトップアプリ開発')
label02.pack()
label03 = tkinter.Label(root, text='tkinter基礎~')
label03.pack()
# リストボックスの作成
link_font=("Arial",14,"underline")
var_list = tkinter.StringVar(value=links)
listbox = tkinter.Listbox(root,width=36,listvariable=var_list,height=0,fg='#0080ff',font=link_font, justify="center",cursor='hand2')
listbox.pack(expand = True)
listbox.bind('<<ListboxSelect>>',submit)
# ウィンドウのループ処理
root.mainloop()
実行すると、このようなウィンドウが表示されます。
もちろん、リストボックスのリンクをクリックすると、該当するページのリンクが表示されますよ。
ご確認ください。
今回はここまでです。
コメント