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`
が綺麗に表示されます。
コメント
コメントを投稿