۱. ورود ماژولها و ثابت فایل¶
خط ۱ تا ۶
هر برنامهی پایتون اول ابزارهایی را که لازم دارد وارد میکند. این برنامه چهار چیز لازم دارد: json برای ذخیرهی داده، os برای بررسی وجود فایل، و tkinter بههمراه ttk و messagebox برای ساختن پنجره و پیامها. بعد هم نام فایل داده یک بار در یک ثابت نوشته میشود تا همهجا از همان استفاده شود.
کد این بخش¶
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- سه بار استفاده میشود: باز کردن برای نوشتن خط ۱۵، بررسی وجود خط ۱۹ و باز کردن برای خواندن خط ۲۱.
سؤالهای تمرینی¶
اول خودت جواب بده، بعد جواب را باز کن.
اگر خط ۳ فقط
import tkinterبود (بدونas tk)، چه چیزی باید عوض میشد؟چرا
FILEاز روی__file__ساخته شده و فقط'shop_data.json'نیست؟نمایش جواب
نام خالی فایل در پوشهی فعلی ترمینال جستوجو میشود. ساختن مسیر از
__file__باعث میشود فایل داده همیشه کنار خود برنامه باشد، از هر جایی که اجرا شود.کدام خطها از
messageboxاستفاده میکنند و برای چه؟آیا میشود بعداً در برنامه مقدار
FILEرا عوض کرد؟نمایش جواب
بله. پایتون ثابت واقعی ندارد و حروف بزرگ فقط یک قرارداد است که میگوید «این را عوض نکن».