今回もttkbootstrapで作成した成果物を記録として残します。
今回作成したのはメータを表示するプログラムです。
コンボボックスでwindowのカラーを選択できるように修正致しました。
成果物
ボタンを押下したら%が増加したり、減ったりします。
一番上のボタンには現在のパーセントが表示されます。
ソースコード
from tkinter import *
import ttkbootstrap as tb
root = tb.Window(themename= "morph") # カラーを決める事が出来る。
root.geometry('500x570')
def up():
my_meter.step(10)
def down():
my_meter.step(-10)
global counter
counter = 5
def clicker():
global counter
if counter <= 100:
my_meter.configure(amountused= counter)
counter += 5
my_button.configure(text=f'現在-> {my_meter.amountusedvar.get()} %')
my_meter = tb.Meter(root, bootstyle="success",
subtext="現在のパーセンテージ",
interactive= True,
textright="%",
metertype="full",
stripethickness=10,
metersize=200,
padding= 50,
amountused=0,
amounttotal=100,
subtextstyle="dark")
my_meter.pack(pady=50)
my_button = tb.Button(root, text="現在-> ", command=clicker)
my_button.pack(pady=10)
my_button2 = tb.Button(root, text="up", command=up)
my_button2.pack(pady=10)
my_butto3 = tb.Button(root, text="down", command=down)
my_butto3.pack(pady=10)
root.mainloop()
chatGPTによる修正とコード説明
上記のプログラムをchatGPTにレビューしてもらいました。
以下の二点を指摘され修正をしてくれました。
修正内容
-
clicker()関数にカウンターの増加とリセットの処理を追加しました。
100を超えたらカウンターを0にリセットします。 -
my_meterの初期値にcounterの値を設定しています。
これによって、100を超えてもカウンターがリセットされ、直感的な操作が可能になります。
また、メータをクリックして値を変更することができます。 -
windowのカラーを変更できるように修正致しました。
コードの概要
-
ライブラリのインポート:
Tkinterを始めとして、必要なライブラリがインポートされています。 -
ttkbootstrapのスタイルの初期化:
ttkbootstrapはBootstrapテーマを使用したTkinterの拡張ライブラリで、スタイルを初期化しています。 -
メーターの設定:
メーター(Meter)といわれるコンポーネントを設定します。
このメーターは、進捗状況をパーセンテージで表示するためのもので、
upボタンとdownボタンを使用してパーセンテージを増減させることができます。また、テーマに応じてメーターの色も変化します。 -
テーマコンボボックスの設定:
テーマを変更するためのコンボボックスを設定します。
テーマとは、GUIのウィンドウの色やデザインを指定するもので、ユーザーはコンボボックスから選択することでテーマを変更できます。
コードはmain()関数でメーターの設定とテーマコンボボックスの設定を行い、root.mainloop()でTkinterのメインループを開始してGUIアプリケーションが起動します。
修正したコードは以下になります。
from tkinter import *
import ttkbootstrap as tb
from ttkbootstrap import Style, Meter, Button, Label
import tkinter as tk
# ttkbootstrapのスタイルを初期化
root = tk.Tk()
root.geometry("500x570")
root.title("windowの色を選択")
style = Style(theme='flatly')
def meters_set():
def up():
my_meter.step(10)
def down():
my_meter.step(-10)
global counter
counter = 5
def clicker():
global counter
counter += 5
if counter > 100:
counter = 0
my_meter.configure(amountused=counter)
my_button.configure(text=f'現在-> {my_meter.amountusedvar.get()} %')
my_meter = Meter(bootstyle="success",
subtext="現在のパーセンテージ",
interactive= True,
textright="%",
metertype="full",
stripethickness=10,
metersize=200,
padding= 50,
amountused=0,
amounttotal=100,
subtextstyle="dark")
my_meter.pack(pady=50)
my_button = Button(text="現在-> ", command=clicker)
my_button.pack(pady=10)
my_button2 = Button(text="up", command=up)
my_button2.pack(pady=10)
my_butto3 = Button(text="down", command=down)
my_butto3.pack(pady=10)
window_label = Label(text="windowの色light", bootstyle="inverse success")
window_label.place(x=220, y= 35)
window_label = Label(text="windowの色dark", bootstyle="inverse success")
window_label.place(x=220, y= 70)
def conbo_set():
# テーマを変更する関数
def change_theme(event):
global style
theme = combo_var.get()
style = Style(theme=theme)
# テーマを変更する関数
def change_theme_2(event):
global style
theme = combo_var_1.get()
style = Style(theme=theme)
# テーマコンボボックスを作成
themes = ['cosmo', 'flatly', 'journal', 'litera', 'lumen', 'minty', 'pulse', 'sandstone', 'united', 'yeti',
'morph', 'simplex', 'cerculean']
combo_var =tb.StringVar()
combo = tb.Combobox(values=themes, textvariable=combo_var)
combo.set("Windowの色を選択")
combo.place(x=330, y=30)
combo.bind("<<ComboboxSelected>>", change_theme) # コンボボックスの選択イベントにchange_theme関数をバインド
themes_1 = ['solar', 'superhero', 'darkly', 'cyborg', 'vapor']
combo_var_1 =tb.StringVar()
combo_1 = tb.Combobox(values=themes_1, textvariable=combo_var_1)
combo_1.set("Windowの色を選択")
combo_1.place(x=330, y=60)
combo_1.bind("<<ComboboxSelected>>", change_theme_2) # コンボボックスの選択イベントにchange_theme関数をバインド
def main():
meters_set()
conbo_set()
if __name__ == '__main__':
main()
root.mainloop()
以上になります。