۱. ورود ماژول‌ها و ثابت فایل

خط ۱ تا ۶

هر برنامه‌ی پایتون اول ابزارهایی را که لازم دارد وارد می‌کند. این برنامه چهار چیز لازم دارد: json برای ذخیره‌ی داده، os برای بررسی وجود فایل، و tkinter به‌همراه ttk و messagebox برای ساختن پنجره و پیام‌ها. بعد هم نام فایل داده یک بار در یک ثابت نوشته می‌شود تا همه‌جا از همان استفاده شود.

کد این بخش

shop_manager.py, lines 1–6
1import json2import os3import tkinter as tk4from tkinter import ttk, messagebox5 6FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'shop_data.json')

روی شماره‌ی هر خط بزن تا به توضیحش بروی؛ روی «خط …» در توضیح بزن تا همان خط در کد روشن شود.

توضیح خط به خط

خط ۱import json
ماژول استاندارد json را وارد می‌کند. JSON یک قالب متنی برای نگه‌داری داده است. این ماژول دیکشنری و لیست پایتون را به متن تبدیل می‌کند (json.dump) و متن را دوباره به دیکشنری برمی‌گرداند (json.load). نیازی به نصب ندارد چون همراه خود پایتون می‌آید.
خط ۲import os
ماژول os ابزارهای کار با سیستم‌عامل را دارد. در این برنامه فقط از یک تابع آن استفاده می‌شود: os.path.exists که می‌گوید آیا فایلی با این نام وجود دارد یا نه (خط ۱۹).
خط ۳import tkinter as tk
کتابخانه‌ی گرافیکی استاندارد پایتون، یعنی tkinter، را با نام کوتاه tk وارد می‌کند. as tk فقط یک نام مستعار است تا به‌جای نوشتن tkinter.Tk بنویسیم tk.Tk.
خط ۴from tkinter import ttk, messagebox
از داخل tkinter دو زیرماژول را مستقیم وارد می‌کند: ttk که ویجت‌های با ظاهر جدیدتر (برچسب، جعبه‌ی ورودی، دکمه، قاب و جدول) را دارد، و messagebox که پنجره‌های کوچک پیام خطا و اطلاعات را نشان می‌دهد. چون با from ... import وارد شده‌اند، می‌شود مستقیم ttk.Button نوشت.
خط ۵
خط خالی. پایتون آن را نادیده می‌گیرد و فقط برای خواناتر شدن کد است.
خط ۶FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'shop_data.json')
یک «ثابت» به نام FILE می‌سازد که مسیر کامل فایل ذخیره‌سازی در آن است. پایتون ثابت واقعی ندارد؛ نوشتن نام با حروف بزرگ یک قرارداد است که می‌گوید «این مقدار را عوض نکن». __file__ مسیر همین فایل shop_manager.py است؛ abspath آن را کامل می‌کند، dirname پوشه‌اش را جدا می‌کند و os.path.join نام shop_data.json را به آن پوشه می‌چسباند. نتیجه: فایل داده همیشه کنار shop_manager.py ساخته و خوانده می‌شود، از هر پوشه‌ای که برنامه اجرا شود.

یادداشت

در نسخه‌ی قبلی این خط FILE = 'shop_data.json' بود. مسیر نسبی یعنی فایل در «پوشه‌ی فعلی» ترمینال ساخته می‌شد؛ اگر برنامه از پوشه‌ی دیگری اجرا می‌شد، داده‌های قبلی دیده نمی‌شدند و یک فایل خالی جدید ساخته می‌شد.

ارتباط با بقیه‌ی کد

همچنین ببینید

json
در خط ۱۶ با json.dump داده را می‌نویسد، در خط ۲۲ با json.load می‌خواند، و در خط ۲۵ خطای json.JSONDecodeError گرفته می‌شود.
os
فقط در خط ۱۹ برای بررسی وجود فایل.
tk
در خط ۶۶ پنجره‌ی اصلی با tk.Tk() ساخته می‌شود و در خط ۱۲۶ ثابت tk.END برای پاک کردن متن جعبه‌ها به کار می‌رود.
ttk
برچسب‌ها خط ۷۲، جعبه‌های ورودی خط ۷۳، قاب دکمه‌ها خط ۱۳۱، دکمه‌ها خط ۱۳۴ و جدول خط ۱۳۷.
messagebox
پیام خطا در خط ۸۹ و خط ۹۱، و پیام گزارش فروش در خط ۱۱۱.
FILE
سه بار استفاده می‌شود: باز کردن برای نوشتن خط ۱۵، بررسی وجود خط ۱۹ و باز کردن برای خواندن خط ۲۱.

سؤال‌های تمرینی

اول خودت جواب بده، بعد جواب را باز کن.

  1. اگر خط ۳ فقط import tkinter بود (بدون as tk)، چه چیزی باید عوض می‌شد؟

    نمایش جواب

    هر جا tk. نوشته شده باید tkinter. می‌شد: tkinter.Tk() در خط ۶۶ و tkinter.END در خط ۱۲۶.

  2. چرا FILE از روی __file__ ساخته شده و فقط 'shop_data.json' نیست؟

    نمایش جواب

    نام خالی فایل در پوشه‌ی فعلی ترمینال جست‌وجو می‌شود. ساختن مسیر از __file__ باعث می‌شود فایل داده همیشه کنار خود برنامه باشد، از هر جایی که اجرا شود.

  3. کدام خط‌ها از messagebox استفاده می‌کنند و برای چه؟

    نمایش جواب

    خط ۸۹ و خط ۹۱ پیام خطا نشان می‌دهند و خط ۱۱۱ گزارش فروش را.

  4. آیا می‌شود بعداً در برنامه مقدار FILE را عوض کرد؟

    نمایش جواب

    بله. پایتون ثابت واقعی ندارد و حروف بزرگ فقط یک قرارداد است که می‌گوید «این را عوض نکن».