python_tkinter_listbox_data_classの各フィールドを_表示する関数


from dataclasses import dataclass

import customtkinter as ctk

import tkinter as tk

from tkinter import Listbox


@dataclass

class Item:

    area_id: str

    farmer_id: str

    item_id: str

    item_name: str

    quantity: int

    unit_price: int


上記のような pythonの data classがあって、


items = []


のリストにいくつかインスタンスをappendしたあと、


tkinterのListboxに for文と map あるいは別の何かを使って、


各itemの data class のインスタンスの

item_nameと quantity と 

unit_price の値を表示するような


関数の記述例を提示していただけないでしょうか?



以下に、`Listbox` に 

`item_name`, `quantity`, `unit_price` 


を表示する関数の例を示します。`map()` を使った方法も含めています。


`Listbox` の各行には、


`item_name`, `quantity`, `unit_price` 


の値がフォーマットされた形で表示されます。


```python


from dataclasses import dataclass

import customtkinter as ctk

import tkinter as tk

from tkinter import Listbox


@dataclass

class Item:

    area_id: str

    farmer_id: str

    item_id: str

    item_name: str

    quantity: int

    unit_price: int


# データリスト

items = [


    Item("A1", "F1", "I1", "Apple", 10, 200),

    Item("A2", "F2", "I2", "Banana", 5, 100),

    Item("A3", "F3", "I3", "Cherry", 15, 300),

]



def populate_listbox(listbox, items):


    """ ListboxにItemデータを表示する """

    listbox.delete(0, tk.END)  # 既存のリストをクリア

    formatted_items

= map( lambda item: f"{item.item_name}:

{item.quantity} pcs 

@ {item.unit_price} yen", items )

    

    for formatted_item in formatted_items:

        listbox.insert(tk.END, formatted_item)




# Tkinter ウィンドウの設定

root = ctk.CTk()

root.title("Item List")


# Listbox の作成

listbox = Listbox(root, width=40, height=10)

listbox.pack(pady=10)


# Listbox にデータを表示

populate_listbox(listbox, items)


# Tkinter メインループ

root.mainloop()


```


### 説明:


1. `Item` クラスをデータクラスとして定義。


2. `items` リストに `Item` インスタンスをいくつか格納。


3. `populate_listbox()` 関数で 

`Listbox` をクリアした後、`map()` を使って 

`item_name`, `quantity`, `unit_price` をフォーマット。


4. `Listbox` に整形済みの文字列を挿入。


5. `Tkinter` ウィンドウを作成し、`Listbox` にデータを表示。


この方法で `Listbox` に 

`item_name`, `quantity`, `unit_price` 


が綺麗に表示されます。


コメント