投稿

蔵書管理システムスマホ版

# book_manager_simple.py (OCR/バーコード機能なし版) import tkinter as tk from tkinter import ttk, messagebox, scrolledtext, filedialog import sqlite3 import requests from bs4 import BeautifulSoup from PIL import Image, ImageTk import os from datetime import datetime class BookDatabase: """SQLiteデータベース管理クラス""" def __init__(self, db_path="book_manager.db"): self.db_path = db_path self.init_database() def get_connection(self): conn = sqlite3.connect(self.db_path) conn.row_factory = sqlite3.Row return conn def init_database(self): conn = self.get_connection() cur = conn.cursor() cur.execute(""" CREATE TABLE IF NOT EXISTS books ( id INTEGER PRIMARY KEY AUTOINCREMENT, isbn TEXT UNIQUE, title TEXT, image_path TEXT, amazon_ra...

コンプレッサー故障診断システム

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ コンプレッサー簡易OBD診断ツール(プロトタイプ) 1ファイル完結版 / Tkinter GUI - MockCompressorDevice: 実機の代わりに疑似センサ値を生成 - DiagnosticEngine: センサ値から故障コードを判定 - CompressorObdApp: Tkinter GUI アプリ本体 このままポートフォリオとして提示できる構成を意識しています。 """ import random from dataclasses import dataclass from typing import List import tkinter as tk from tkinter import ttk # ============================== # データモデル # ============================== @dataclass class CompressorState: """コンプレッサーの現在状態を表すデータクラス""" discharge_pressure_bar: float # 吐出圧力 discharge_temp_c: float # 吐出温度 motor_current_a: float # モータ電流 ambient_temp_c: float # 周囲温度 run_hours: float # 運転時間 start_count: int # 起動回数 is_running: bool # 運転中フラグ @dataclass class FaultCode: """故障コード情報を表すデータクラス""" code: st...

GUIコンポーネント・ウィジェット100本ノック3本目

 import tkinter as tk from tkinter import ttk def show_knock():     for child in container.winfo_children():         child.destroy()          name = combo.get()          # --- 100本ノック 第3セット メインロジック ---     if name == "21. Listbox (複数選択可能)":         # selectmode="multiple" で複数選択を許可         w = tk.Listbox(container, selectmode="multiple", height=5)         for i in range(5): w.insert(tk.END, f"項目 {i+1}")              elif name == "22. Listbox (スクロール連動)":         f = tk.Frame(container)         sb = tk.Scrollbar(f, orient="vertical")         lb = tk.Listbox(f, yscrollcommand=sb.set)         sb.config(command=lb.yview)         for i in range(50): lb.insert(tk.END, f"大量データ {i}")         ...

GUIコンポーネント・ウィジェット100本ノック2本目

 import tkinter as tk from tkinter import ttk def show_knock():     for child in container.winfo_children():         child.destroy()          name = combo.get()          # キャンバスを基本の土台として生成     cv = tk.Canvas(container, width=300, height=200, bg="white", highlightthickness=1, highlightbackground="gray")     # --- 100本ノック 第2セット メインロジック ---     if name == "11. Canvas (直線)":         cv.create_line(50, 50, 250, 150, fill="blue", width=5)         w = cv          elif name == "12. Canvas (点線/破線)":         cv.create_line(50, 100, 250, 100, dash=(5, 2), width=2)         w = cv              elif name == "13. Canvas (長方形)":         cv.create_rectangle(50, 50, 250, 150, outline="red", fill="yellow", width=3)      ...

GUIコンポーネント・ウィジェット100本ノック1本目!

 import tkinter as tk from tkinter import ttk def show_knock():     for child in container.winfo_children():         child.destroy()          name = combo.get()          # --- 100本ノック メインロジック ---     if name == "1. Label (浮き出し)":         w = tk.Label(container, text="彫刻のようなラベル", relief="raised", bd=5, font=("Arial", 15))          elif name == "2. Button (画像+文字)":         # bitmapを使って、文字とアイコンを同時に表示         w = tk.Button(container, text=" 保存", bitmap="info", compound="left", padx=10)              elif name == "3. Entry (伏せ字)":         w = tk.Entry(container, show="*", font=("Arial", 20)) # パスワード用              elif name == "4. Text (色付き行)":         w = tk.Text(container, width=20, height=3)     ...

高度なウィジェットセレクター4

 import tkinter as tk from tkinter import ttk def on_select():     for child in container.winfo_children():         child.destroy()          name = combo.get()          if name == "オプションメニュー (OptionMenu)":         # 変数と連動する古いスタイルの選択メニュー         var = tk.StringVar(root)         var.set("選択肢1")         w = tk.OptionMenu(container, var, "選択肢1", "選択肢2", "選択肢3")              elif name == "システムアイコン (Bitmap)":         # Tkinter内蔵のアイコンを表示         w = tk.Frame(container)         icons = ["error", "gray75", "info", "questhead", "question", "warning"]         for icon in icons:             tk.Label(w, bitmap=icon).pack(side="left", padx=5)               ...

高度なウィジェットセレクター3

 import tkinter as tk from tkinter import ttk from tkinter import colorchooser, filedialog, messagebox def on_select():     # コンテナを掃除     for child in container.winfo_children():         child.destroy()          name = combo.get()          if name == "カラー選択 (ColorChooser)":         # ボタンを押すとOSの色選択が開く         def pick_color():             color = colorchooser.askcolor(title="色を選んでください")             if color[1]:                 label_color.config(text=f"選んだ色: {color[1]}", bg=color[1])                  btn = tk.Button(container, text="パレットを開く", command=pick_color)         btn.pack(pady=10)         label_color = tk.Label(container, text="ここに結果が出ます")        ...