WXPHUTON kutubxonasi ishchi ilova yaratish haqida tushincha

|
WXPHUTON kutubxonasi ishchi ilova yaratish haqida tushincha
|
bet | 5/5 | Sana | 20.05.2024 | Hajmi | 0,76 Mb. | | #246961 |
Bog'liq WXPHUTON KUTUBXONASI VA IMKONIYATLARI
Yangi narsalarni yaratishda birinchi qadam nima yaratmoqchi ekanligingizni aniqlashdir. Bunday holda, men siz uchun bu qarorni qabul qilish huquqini oldim. Siz MP3 teg muharririni qanday yaratishni o'rganasiz! Yangi narsalarni yaratishda keyingi qadam vazifangizni bajarishda qanday paketlar yordam berishi mumkinligini aniqlashdir.
Agar Google ni qidirsangiz Python mp3 tagging, sizda bir nechta variant bor:
mp3-tagger
eyeD3
mutagen
Men ulardan bir nechtasini sinab ko'rdim va eyeD3-da MP3 ID3 spetsifikatsiyasi bilan bog'lanib qolmasdan foydalanishingiz mumkin bo'lgan yaxshi API borligiga qaror qildim. Siz eyeD3 nipip quyidagi tarzda o'rnatishingiz mumkin:
$ pip install eyed3
libmagicUshbu paketni macOS-ga o'rnatayotganda, yordamida o'rnatishingiz kerak bo'lishi mumkin brew. Windows va Linux foydalanuvchilari eyeD3 ni o'rnatishda hech qanday muammoga duch kelmasligi kerak.
Foydalanuvchi interfeysini loyihalash
Interfeysni loyihalash haqida gap ketganda, foydalanuvchi interfeysi qanday ko'rinishda bo'lishi kerak, deb o'ylagancha eskiz qilish har doim yoqimli.
Siz quyidagilarni bajarishingiz kerak bo'ladi:
Bir yoki bir nechta MP3 faylni oching
Joriy MP3 teglarini ko'rsatish
MP3 tegini tahrirlash
Ko'pgina foydalanuvchi interfeyslari fayllar yoki papkalarni ochish uchun menyu yoki tugmalardan foydalanadi. Buning uchun Fayl menyusiga o'tishingiz mumkin . Ehtimol, siz bir nechta MP3 fayllari uchun teglarni ko'rishni xohlayotganingiz uchun, buni chiroyli tarzda amalga oshiradigan vidjetni topishingiz kerak bo'ladi.
Ustunlar va satrlar bilan jadval shaklida bo'lgan narsa ideal bo'ladi, chunki siz MP3 teglari uchun ustunlarni belgilashingiz mumkin. wxPython asboblar to'plamida buning uchun ishlaydigan bir nechta vidjetlar mavjud, eng yaxshi ikkitasi quyidagilar:
wx.grid.Grid
wx.ListCtrl
wx.ListCtrlBu holda siz foydalanishingiz kerak, chunki Gridvidjet haddan tashqari ko'p va ochig'ini aytganda, u ham biroz murakkabroq. Nihoyat, tanlangan MP3 tegini tahrirlash uchun foydalanish tugmasi kerak.
Endi siz nimani xohlayotganingizni bilganingizdan so'ng, uni chizishingiz mumkin:
Yuqoridagi rasm bizga ilova qanday ko'rinishi haqida fikr beradi. Endi nima qilishni xohlayotganingizni bilganingizdan so'ng, kodlash vaqti keldi!
Foydalanuvchi interfeysini yaratish
Yangi ariza yozishda turli xil yondashuvlar mavjud. Masalan, Model-View-Controller dizayn namunasiga amal qilishingiz kerakmi ? Sinflarni qanday ajratasiz? Har bir fayl uchun bitta sinf? Bunday savollar ko'p va siz GUI dizayni bo'yicha ko'proq tajribaga ega bo'lgach, ularga qanday javob berishni xohlayotganingizni bilib olasiz.
Sizning holatingizda sizga faqat ikkita sinf kerak bo'ladi:
Bir wx.Panelsinf
Bir wx.Framesinf
Siz boshqaruvchi turdagi modul yaratish uchun ham bahslashishingiz mumkin, ammo shunga o'xshash narsa uchun sizga haqiqatan ham kerak emas. Har bir sinfni o'z moduliga qo'yish uchun vaziyat ham yaratilishi mumkin, ammo uni ixcham saqlash uchun siz barcha kodingiz uchun bitta Python faylini yaratasiz.
Import va panel sinfidan boshlaylik:
import eyed3
import glob
import wx
class Mp3Panel(wx.Panel):
def __init__(self, parent):
super().__init__(parent)
main_sizer = wx.BoxSizer(wx.VERTICAL)
self.row_obj_dict = {}
self.list_ctrl = wx.ListCtrl(
self, size=(-1, 100),
style=wx.LC_REPORT | wx.BORDER_SUNKEN
)
self.list_ctrl.InsertColumn(0, 'Artist', width=140)
self.list_ctrl.InsertColumn(1, 'Album', width=140)
self.list_ctrl.InsertColumn(2, 'Title', width=200)
main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 5)
edit_button = wx.Button(self, label='Edit')
edit_button.Bind(wx.EVT_BUTTON, self.on_edit)
main_sizer.Add(edit_button, 0, wx.ALL | wx.CENTER, 5)
self.SetSizer(main_sizer)
def on_edit(self, event):
print('in on_edit')
def update_mp3_listing(self, folder_path):
print(folder_path)
Bu yerda siz eyed3paketni, Python globpaketini va wxfoydalanuvchi interfeysingiz uchun paketni import qilasiz. Keyinchalik, siz pastki sinfni yaratasiz wx.Panelva foydalanuvchi interfeysingizni yaratasiz. MP3-lar haqidagi ma'lumotlarni saqlash uchun sizga lug'at kerak bo'lib, siz uni nomlashingiz mumkin row_obj_dict.
Keyin siz yaratasiz va uni botgan chegara ( ) bilan wx.ListCtrlhisobot rejimiga ( ) o'rnatasiz . Ro'yxatni boshqarish siz kiritgan uslub bayrog'iga qarab bir nechta boshqa shakllarni olishi mumkin, ammo hisobot bayrog'i eng ommabop hisoblanadi.wx.LC_REPORTwx.BORDER_SUNKEN
To'g'ri sarlavhalarga ega bo'lish uchun har bir ustun sarlavhasiga ListCtrlqo'ng'iroq qilishingiz kerak bo'ladi . .InsertColumn()Keyin siz ustun indeksini, uning yorlig'ini va ustunning piksellardagi kengligini ko'rsatasiz.
EditOxirgi qadam - tugmachani, hodisani ishlov beruvchini va usulni qo'shish . Siz hodisaga bog'lanishni yaratishingiz va u chaqirgan usulni hozircha bo'sh qoldirishingiz mumkin
Endi siz ramka uchun kodni yozishingiz kerak:
class Mp3Frame(wx.Frame):
def __init__(self):
super().__init__(parent=None,
title='Mp3 Tag Editor')
self.panel = Mp3Panel(self)
self.Show()
if __name__ == '__main__':
app = wx.App(False)
frame = Mp3Frame()
app.MainLoop()
Bu sinf birinchisiga qaraganda ancha sodda, chunki siz faqat ramka sarlavhasini belgilashingiz va panel sinfini yaratishingiz kerak, Mp3Panel. Ishingiz tugagach, foydalanuvchi interfeysi quyidagicha ko'rinishi kerak:
Foydalanuvchi interfeysi deyarli to'g'ri ko'rinadi, lekin sizda Fayl menyusi yo'q . Bu dasturga MP3 qo'shish va teglarini tahrirlashni imkonsiz qiladi!
Keling, buni hozir tuzatamiz.
Ishlaydigan dastur yarating
Ilovangizni ishga tushirishning birinchi qadami dasturni yangilashdir, shunda u Fayl menyusiga ega bo'ladi, chunki u holda siz o'zingizning ijodingizga MP3 fayllarni qo'shishingiz mumkin. Menyular deyarli har doim sinfga qo'shiladi wx.Frame, shuning uchun siz o'zgartirishingiz kerak bo'lgan sinfdir.
Eslatma: Ba'zi ilovalar o'z ilovalarida menyudan uzoqlashdi. Buni birinchilardan biri Microsoft Office tasma panelini qo'shganda qildi. wxPython asboblar to'plamida lentalar yaratish uchun foydalanishingiz mumkin bo'lgan maxsus vidjet mavjud wx lib.agw.ribbon.
So'nggi paytlarda menyularni o'chirib qo'ygan boshqa turdagi ilovalar bu Google Chrome va Mozilla Firefox kabi veb-brauzerlardir. Hozirgi kunda ular faqat asboblar panelidan foydalanadilar.
Keling, ilovamizga menyu satrini qanday qo'shishni bilib olaylik:
class Mp3Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None,
title='Mp3 Tag Editor')
self.panel = Mp3Panel(self)
self.create_menu()
self.Show()
def create_menu(self):
menu_bar = wx.MenuBar()
file_menu = wx.Menu()
open_folder_menu_item = file_menu.Append(
wx.ID_ANY, 'Open Folder',
'Open a folder with MP3s'
menu_bar.Append(file_menu, '&File')
self.Bind(
event=wx.EVT_MENU,
handler=self.on_open_folder,
source=open_folder_menu_item,
self.SetMenuBar(menu_bar)
def on_open_folder(self, event):
title = "Choose a directory:"
dlg = wx.DirDialog(self, title,
style=wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
self.panel.update_mp3_listing(dlg.GetPath())
dlg.Destroy()
.create_menu()Bu erda siz sinf konstruktoriga qo'ng'iroqni qo'shasiz . Keyin o'z-o'zidan siz misol va misol .create_menu()yaratasiz .wx.MenuBarwx.Menu
Menyuga menyu elementini qo'shish uchun siz menyu misoliga qo'ng'iroq qilasiz .Append()va unga quyidagilarni o'tkazasiz:
Noyob identifikator
Yangi menyu elementi uchun yorliq
Yordam qatori
Keyinchalik, menyuni menyu paneliga qo'shishingiz kerak, shuning uchun menyu paneliga qo'ng'iroq qilishingiz kerak bo'ladi .Append(). U menyu namunasini va menyu uchun yorliqni oladi. Bu yorliq biroz gʻalati, chunki siz uni &Fileoʻrniga deb atagansiz File. Amersand wxPython-ga faqat klaviaturangiz yordamida menyuni ochish uchun Alt+F klaviatura yorlig'ini yaratishni aytadi .File
Eslatma:wx.AcceleratorTable Agar siz ilovangizga klaviatura yorliqlarini qo'shmoqchi bo'lsangiz, ularni yaratish uchun misoldan foydalanishni xohlaysiz . Accerator jadvallari haqida ko'proq wxPython hujjatlarida o'qishingiz mumkin .
Hodisa bog'lanishini yaratish uchun siz self.Bind()freymni bog'laydigan qo'ng'iroq qilishingiz kerak bo'ladi wx.EVT_MENU. Menyu hodisasi uchun foydalanayotganingizda , wxPython-ga nafaqat qaysi birini ishlatishni, balki ishlov beruvchini qaysi biri bilan bog'lashni ham self.Bind()aytishingiz kerak .handlersource
.SetMenuBar()Nihoyat, foydalanuvchiga ko'rsatilishi uchun siz ramkaga qo'ng'iroq qilishingiz va uni menyu satriga o'tkazishingiz kerak.
Endi siz freymingizga menyu qo‘shilganingizdan so‘ng, keling, menyu elementining hodisa ishlovchisini ko‘rib chiqamiz, u quyida yana takrorlanadi:
def on_open_folder(self, event):
title = "Choose a directory:"
dlg = wx.DirDialog(self, title, style=wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
self.panel.update_mp3_listing(dlg.GetPath())
dlg.Destroy()
Agar foydalanuvchi MP3-larni o'z ichiga olgan papkani tanlashini xohlasangiz, wxPython-dan foydalanishni xohlaysiz wx.DirDialog. Bu wx.DirDialogfoydalanuvchiga faqat kataloglarni ochishga imkon beradi.
Siz dialog oynasining sarlavhasini va turli uslub bayroqlarini o'rnatishingiz mumkin. Muloqot oynasini ko'rsatish uchun siz qo'ng'iroq qilishingiz kerak bo'ladi .ShowModal(). Bu dialog oynasining modal ko'rinishiga olib keladi, ya'ni dialog oynasi ko'rsatilganda foydalanuvchi asosiy ilovangiz bilan o'zaro aloqa qila olmaydi.
Agar foydalanuvchi dialog oynasining OK tugmasini bossa, siz muloqot oynasi orqali foydalanuvchining yo'l tanlashini olishingiz mumkin .GetPath(). Siz ushbu yo'lni panel sinfiga o'tmoqchi bo'lasiz, buni panelga qo'ng'iroq qilish orqali amalga oshirishingiz mumkin .update_mp3_listing().
Nihoyat, siz dialogni yopishingiz kerak. Muloqot oynasini yopish uchun tavsiya etilgan usul uni chaqirishdir .Destroy().
XULOSA
wxPython GUI asboblar to'plami bu wxWidgets deb nomlangan C++ kutubxonasi atrofidagi Python o'ramidir . WxPython-ning dastlabki chiqarilishi 1998 yilda bo'lgan, shuning uchun wxPython anchadan beri mavjud. wxPython-ning PyQt yoki Tkinter kabi boshqa asboblar to'plamlaridan asosiy farqi shundaki, wxPython iloji boricha mahalliy platformadagi haqiqiy vidjetlardan foydalanadi. Bu wxPython ilovalarini u ishlayotgan operatsion tizimga xos qiladi.
wxPython asboblar to'plamida tanlash uchun yuzdan ortiq vidjet mavjud. Bu sizga boy ilovalar yaratish imkonini beradi, lekin qaysi vidjetdan foydalanishni aniqlashga urinish ham qiyin bo‘lishi mumkin. Shuning uchun wxPython Demo foydalidir, chunki u sizning loyihangizga tegishli bo'lishi mumkin bo'lgan vidjetlarni topishga yordam beradigan qidiruv filtriga ega.
Ko'pgina hollarda bitta Python kengaytmasi modulini yaratish uchun bir nechta ETG/SIP fayllaridan foydalaniladi. Bunday hollarda bitta ETG skripti barcha qolganlarini bitta kengaytma moduliga birlashtirish uchun ishlatiladi (masalan, orqa tomon gene ratorining o'z ichiga olish xususiyatidan foydalanish orqali). Bu skriptlarning nomlarida asosiy pastki chiziq bo'ladi, masalan, , etg/_core.pyva ushbu kengaytma moduliga qo'shilishi mo'ljallangan barcha skriptlar MODULE o'zgaruvchisida ushbu nomni ko'rsatishi kerak.
Foydalanilgan adabiyotlar ro’yxati
https://realpython.com/python-gui-with-wxpython/#:~:text=WxPython%20yordamida%20Python,qilgansiz..on_edit()
https://wxpython.org/pages/downloads/
https://wxpython.org/blog/2017-08-17-builds-for-linux-with-pip
https://pypi.org/project/wxPython/#:~:text=wxPythonning%20Feniks%20loyihasiga,python%20bilan%20boshlanadi).
PyPI (https://pypi.org/project/wxPython/)
|
| |