1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【python】ttkbootstrapメータを表示

Last updated at Posted at 2023-07-29

今回もttkbootstrapで作成した成果物を記録として残します。
今回作成したのはメータを表示するプログラムです。

コンボボックスでwindowのカラーを選択できるように修正致しました。

成果物

image.png

ボタンを押下したら%が増加したり、減ったりします。
一番上のボタンには現在のパーセントが表示されます。

ソースコード

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にレビューしてもらいました。
以下の二点を指摘され修正をしてくれました。

修正内容

  1. clicker()関数にカウンターの増加とリセットの処理を追加しました。
    100を超えたらカウンターを0にリセットします。

  2. my_meterの初期値にcounterの値を設定しています。
    これによって、100を超えてもカウンターがリセットされ、直感的な操作が可能になります。
    また、メータをクリックして値を変更することができます。

  3. windowのカラーを変更できるように修正致しました。

コードの概要

  1. ライブラリのインポート:
    Tkinterを始めとして、必要なライブラリがインポートされています。

  2. ttkbootstrapのスタイルの初期化:
    ttkbootstrapはBootstrapテーマを使用したTkinterの拡張ライブラリで、スタイルを初期化しています。

  3. メーターの設定:
    メーター(Meter)といわれるコンポーネントを設定します。
    このメーターは、進捗状況をパーセンテージで表示するためのもので、
    upボタンとdownボタンを使用してパーセンテージを増減させることができます。また、テーマに応じてメーターの色も変化します。

  4. テーマコンボボックスの設定:
    テーマを変更するためのコンボボックスを設定します。
    テーマとは、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()

以上になります。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?