【python】作りながら覚えるデスクトップアプリ開発|tkinter

python

この記事も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()

実行すると、このようなウィンドウが表示されます。

もちろん、リストボックスのリンクをクリックすると、該当するページのリンクが表示されますよ。
ご確認ください。


今回はここまでです。

コメント

タイトルとURLをコピーしました