Sadə bir ToDo tətbiqi qurmaq üçün PyQT5 ModelView memarlığından istifadə edərək Mac App Store-da Todo

ModelView Memarlıq Qt S MVC kimi interfeysi Baxışlarda məlumatların göstərilməsi üçün

Qaçış tətbiqi aşağıda göstərilir.

Todo 4+

Bir neçə ildir ki, bu proqramı iPad, iPhone və MacBookPro-da istifadə etdim. İOS-da mükəmməl işləməyə davam edərsə, görünür ki, macosun təkamülünə tam əməl etməmişdir.
Heç bir problem qurma. Ancaq Macos-da Toodledo ilə sinxronizasiya etmək artıq mümkün deyil, iOS-da mümkün olmağa davam edir: eyni identifikatorlar tanınmır.
Buna görə də mənim üçün lazımsız olur … və Appigo köməyi mənim istəyimə cavab vermək üçün tələsik görünmür. Müştərinin anlayışının hər gün bir az dəyərini itirdiyini qeyd etmək həmişə xoşagəlməzdir.

Pisa d

Bu yeniləmədən bəri 12 saylı bütün siyahılarımı itirdim və hər gün peşəkar şəkildə işlədiyim. Təxminən 200 nöqtəni daim idarə edirəm, bu yeniləmə qatı aylıq aylarında qoydu ! Siyahıda təşkil edilən bütün vəzifələr özlərini bir qlobal siyahıda qruplaşdırdılar. Əlbəttə ki, bu səhv deyil bu səhv deyil, bu proqramın peşəkarlığını söyləyərək bu proqramı əks halda əladır. Heç vaxt əsir olmayacağam. Bu axşam bu axşam e-poçtla əlaqə saxladığınızdan və ya sonra bu möhtəşəm proqramın köhnə versiyasını tapa biləcəyim üçün yalnız mənim üçün qalır. Həqiqətən ümid edirəm ki, yeni versiyanın gənc bir beugu və əvvəlki versiya ilə əldə edilmiş funksiyalar tapmaq üçün pullu pro versiyasına köç etmək üçün bir strategiya deyil. Məlumat üçün Sync Dropbox ilə aparılır

SurlePoint, 12/13/2011

Synchro indi nikeldir

Yavaş olan sinxronizasiya qarşısında tutuldum, pis getdim və s. Ancaq indi iCloud ilə, mənə mükəmməl uyğun gəlir.

Bəzi mümkün inkişaflar: Daha çox ekran parametrləri.
– istifadəçinin nə istifadə etdiyini göstərmək üçün. Məsələn, kontekst və ya etiketlərdən istifadə etmirəm (hər halda hələ də deyil) və mən artıq “çirkləndirən” bu variantları göstərməyimi istərdim. Gündəlik qeydlərim üçün yalnız “tarix / prioritet / növü” və nadir hallarda istifadə etdiyim seçimlər üçün sağ klikləmək istərdim
– Və əksinə, tarixi, prioriteti, siyahını seçmək üçün bir damla -dow menyusundan daha çox bir plsu ekranı istərdim, yalnız üç siyahı varsa, üç düymə görünmək üçün kifayət edərdim və siyahımı seçə bilərdim Drop -down menyusunu tıklamaq əvəzinə bir kliklə, adını tapın və vurun. (Priorto prioritet, xüsusən də Todo siyahısında çox vizual rəsmdən çox təbii olmayan variantlarda bir ad seçimi üçün getdiyimizi.

Bunlar erqonomik təfərrüatlarıdır. Mən todonun sadəliyini və səmərəliliyini bəyənirəm, buna görə də daha sadə olmaq üçün daha da konfiqurasiya edilə bilər.

Məxfilik Tətbiqi

Geliştirici, Appigo, özəl təcrübələri və Apple-a məlumatların idarə edilməsi barədə məlumat verməyib. Daha çox məlumat üçün İnkişafın Məxfilik Siyasətinə baxın.

ModelView memarlıq
Baxışlarda məlumatların göstərilməsi üçün QT-nin MVC kimi interfeysi

Pyqt5 ilə daha mürəkkəb tətbiqlər qurmağa başladıqca, ehtimal ki, məlumatlarınızla sinxronizasiya ilə vidjetləri saxlayırsınız. Widgetlarda saxlanan məlumatlar (e).g. python-dan manipulyasiya etmək üçün sadə bir qlistwidget) asanlıqla mövcud deyil – dəyişikliklər bir element almağı, məlumatları əldə etməyinizi və sonra yenidən qurmağı tələb edir. Bunun üçün standart həll yolu Pythonda xarici məlumat nümayəndəliyini saxlamaq və sonra hər iki məlumat və vidjetə və ya wihole vidjetini məlumatlardan yenidən yazmaqdır. Bu, tez bir zamanda çirkin ola bilər və yalnız məlumatları ləkələmək üçün bir çox qazanla nəticələnə bilər.

Şükürlər olsun ki, QT bunun üçün bir həll yolu var – ModelViews. ModelViews, standart ekran vidjetlərinə güclü bir alternativdir, bu daimi məlumat mənbələri ilə qarşılıqlı əlaqə qurmaq üçün müntəzəm bir model interfeysindən istifadə edir – sadə məlumat strukturlarından xarici verilənlər bazasına qədər. Bu, məlumatlarınızı izləyir, bəyəndiyiniz hər hansı bir quruluşda saxlanılmasına imkan verir, görüntü təqdimat və yeniləmələrə diqqət yetirir.

Bu dərs vəsaiti QT-nin ModelView memarlığının əsas aspektlərini təqdim edir və PYQT5-də sadə masaüstü todo tətbiqi qurmaq üçün istifadə edir.

Model görünüşü nəzarətçisi

Model – Bax – nəzarətçi (MVC), bir tətbiqin üç qarşılıqlı hissəyə bölünən inkişaf istifadəçi interfeysləri üçün bir memarlıq nümunəsidir. Bu, məlumatların daxili nümayəndəliyini istifadəçidən necə təqdim edildiyi və qəbul edildiyindən ayırır.

MVC Dizayn Pattenn üç əsas komponenti təyin edir –

  • Model Tətbiqin işlədiyi məlumat quruluşunu saxlayır.
  • Baxış istifadəçiyə göstərildiyi kimi məlumatların hər hansı bir nümayəndəliyidir, burada qrafik və ya masa. Eyni məlumat modelinin birdən çox mənzərəsinə icazə verilir.
  • Nəzarət İstifadəçidən giriş qəbul edir, model və ya görünüş üçün əmrlərə çevrilir.

İT QT Torpağı Görünüş və Nəzarətçi arasındakı fərq bir az qarışıq olur. QT, istifadəçidən (OS vasitəsilə) giriş hadisələrini (OS vasitəsilə) qəbul edir və idarə etmək üçün vidjetlərə (nəzarətçi) nəql edir. Bununla birlikdə, widgetlar da mövcud vəziyyətin istifadəçiyə təqdimatını, görüntüsünə qüsurlu şəkildə qoyur. Xəttin harada çəkilməsi ilə yanaşı, Qt-S-S-Danışmada və nəzarətçisinin birləşdirilmiş birləşdirilmiş tövsiyə olunan bir model / ViewController memarlığı “Model Görünüşü” adlı “Model Görünüşü”.

Əhəmiyyətli olan, arasındakı fərq məlumatNecə təqdim olunur qorunur.

Model görünüşü

Model məlumat mağazası və Viewcontroller arasındakı interfeys kimi fəaliyyət göstərir. Model məlumatları (və ya ona bir istinad) saxlayır və bu məlumatları istifadəçiyə baxan və istifadəçiyə təqdim edən standart bir API vasitəsilə təqdim edir. Birdən çox mənzərə eyni məlumatları tamamilə fərqli şəkildə təqdim edə bilər.

Modeliniz üçün hər hansı bir “məlumat mağazasından istifadə edə bilərsiniz, məsələn standart piton siyahısı və ya lüğət və ya bir verilənlər bazası (e vasitəsilə).g. Sqlalchemy) – bu sizə aiddir.

İki hissə əslində məsuliyyət daşıyır –

  1. Çay model Məlumatları və ya ona istinadları saxlayır və fərdi və ya qeydlərin dəyişir və əlaqəli metadata və ya göstərmək təlimat.
  2. Çay baxış Modeldən məlumat tələb edir və widgetda nə geri qaytarıldığını göstərir.

Sənədlərdə QT memarlığının dərin müzakirəsi var.

Pyinstaller ilə Python GUI tətbiqlərini qablaşdırmaq üçün tam bələdçi.

Pyinstaller ilə Python tətbiqləri qablaşdırma

[[endirim.Endirim_pc]]] Sonrakı üçün% endirim.Müddət]] [endirim.Təsvir]] Kodla [endirim.Kupon Kodu]]

Satınalma Güc Pariteti

[[Ölkə]] [[endirim.endirim_pc]]] Bütün kitablar və kodlar olan Kitablarda [endirim.Kupon Kodu]]

Sadə bir model görünüşü – Todo siyahısı

ModelViews’i tətbiqetmədə necə istifadə edəcəyinizi nümayiş etdirmək üçün bir masa üstü todo siyahısının çox sadə bir tətbiqini bir araya gətirəcəyik. Bu, maddələrin siyahısı, yeni əşyalar daxil etmək üçün bir QListView-dən, yeni əşyalar daxil etmək üçün bir QlineDIT və Bitkiləri əlavə etmək, silmək və ya işarələmək üçün düymələr dəsti üçün bir qlistView-dən ibarətdir.

UI

Sadə UI çirkin çıxış edən QT yaradıcısı idi və Mainwindow kimi qeyd edildi.ui . Çay .UI faylı və bütün digər hissələri aşağıda yüklənə bilər.

QT yaradıcısında sadə bir TODO tətbiqini tərtib etmək

QT yaradıcısında sadə bir TODO tətbiqini tərtib etmək

Qaçış tətbiqi aşağıda göstərilir.

Todo Gui çalışan (hələ heç nə işləmir)

Todo Gui çalışan (hələ heç nə işləmir)

İnterfeysdə mövcud olan vidjetlər Aşağıdakı cədvəldə göstərilən şəxsiyyətləri verdik.

naxışlamaq Mehriban Təsvir
todview QlistView Cari todosların siyahısı
toditit QlineDIT Yeni bir toDo elementi yaratmaq üçün mətn girişi
addbutton Qpushbutton Yeni Todo yaradın, todos siyahısına əlavə edin
seletebutton Qpushbutton Cari seçilmiş todonu silmək, onu todos siyahısından çıxarın
Kopyalamaq Qpushbutton Mövcud seçilmiş TODO-nu bitdiyi kimi qeyd edin

Bu identifikatorlardan sonra tətbiq məntiqini bağlamaq üçün istifadə edəcəyik.

Model

Xüsusi modelimizi tətbiqi altındakı subclassing tərəfindən müəyyənləşdiririk, bizə özümüzü özümüzə bənzərsiz hissələrə diqqət yetirməyə imkan veririk. QT siyahılar, ağaclar və masalar da daxil olmaqla bir sıra fərqli model bazalarının bir sıra, (cədvəllər üçün idealdır).

Bu nümunə üçün nəticəni bir QlistView-a göstərdik . Bunun üçün uyğun baza modeli Qabstractlistmodeldir . Modelimiz üçün kontur tərifi aşağıda göstərilir.

Sinif todomodel (qtcore).QabstractListModel): def __init __ (Öz-özünə, * args, todos = heç biri, ** kwargs): Super (toomodel, özünü).__init __ (* args, ** kwargs) özünü.TODOS = TODOS və ya [] DEF məlumatları (öz-özünə, indeks, rol): rol == qt varsa.DisplayRole: # Məlumat quruluşu üçün aşağıya baxın. status, mətn = özünü.TODOS [indeksi.Sıra ()] # yalnız todo mətnini geri qaytarın. Qayıdış Mətn Def Rowcount (Öz-özünə, İndeks): Len (Özü) qayıt.todos) 

Çay .Todos dəyişən məlumat mağazamız və iki üsul RowCount () və məlumat () və məlumat () bir siyahı modeli üçün lazım olan standart model metodlarıdır. Aşağıdakı növbə ilə bunlardan keçəcəyik.

.TODOS siyahısı

Modelimiz üçün məlumat mağazası .Todos, formatda dəyərli bir dəyərləri saxlayacağımız sadə bir python siyahısı [(bool, str), (bool, str), (bool, str), (bool, str)) bool olduğu yerdir buna görə Verilən bir giriş və küçənin vəziyyəti todo mətninin mətnidir.

Özünü işə salırıq.Başlanğıcdakı boş bir siyahıya qədər, bir siyahı todos açar söz arqumenti ilə keçməyincə.

öz-özünə.todos = todos və ya [] özünü təyin edəcək.Todos Təqdim olunan TODOS dəyərinə keşikçi (i.e. Boş bir siyahıdan başqa bir şey, boolean saxta və ya standart dəyəri yoxdur), əks halda boş siyahıya qoyulacaqdır [] .

Bu modelin bir məntiqi yaratmaq üçün sadə bilərik –

Model = toomodel () # boş bir todo siyahısı yaradın 

Ya da mövcud bir siyahıda keçmək –

todos = [(yalan, 'bir maddə'), (yalan, 'başqa bir maddə')] Model = Todomodel (Todos) 

.RowCount ()

Çay .RowCount () metodu, cari məlumatlara satırların sayını almaq üçün görünüşü ilə Callade. Bu, məlumat mağazasını (sıra sayı-1) yenidən düzəldə biləcəyi maksimum indeksin görünməsi üçün tələb olunur. Məlumat mağazamız olaraq bir piton siyahısından istifadə edərək satış, bunun üçün geri qayıtma dəyəri sadəcə siyahıdan ibarətdir ().

.Məlumat ()

Bu, görünüşün məlumatı üçün istəkləri həll edən və müvafiq nəticəni geri qaytaran modelinizin əsasını təşkil edir. İki parametr indeksi və rolunu alır.

İndeks, görünüşün tələb olunduğu məlumatların mövqeyi / koordinatları, iki üsulla əldə edilə bilər .Sıra () və .hər ölçüdə mövqe verən sütun ().

QlistView üçün hər zaman 0-dır və nəzərə alınmır, ancaq bu, bir elektron tablo görüntüsündə 2D məlumatları üçün istifadə etməlisiniz.

Rol, bir bayraq olduğunu göstərir mehriban məlumatların görünüşü tələb olunur. Bunun səbəbi .Məlumat () metodu əslində əsas məlumatlardan daha çox məsuliyyətə malikdir. Həm də stil məlumatı, alətlər, status barları və s. Üçün istəkləri idarə edir. – məlumatların özü tərəfindən məlumatlandırıla bilən əsaslı bir şey.

Qt adlandırması.DisplayRole bir az qəribədir, amma bu göstərir baxış bizdən “xahiş edirəm mənə məlumat verin”. Digərləri var rol Məlumatların styling sorğuları və ya “redaktə hazır” formatında məlumat tələb etmək üçün məlumatlar ala bilər.

Rol Dəyər Təsvir
Qt.Göstərmək 0 Mətn şəklində rendləşdiriləcək əsas məlumatlar. (Qring)
Qt.Dekorasiya 1 Bir simge şəklində bəzək kimi göstəriləcək məlumatlar. (QColor, QICON və ya QPIXMap)
Qt.Redaksiya 2-ci Redaktorda redaktoru rəsmi bir şəkildə izləmək. (Qring)
Qt.Tooltiprole 3-cü Maddənin alətində göstərilən məlumatlar. (Qring)
Qt.Statustiprole 4-ə Vəziyyət çubuğunda göstərilən məlumatlar. (Qring)
Qt.Whatsthisrole Əqrəb “Bu nədir” element üçün göstərilən məlumatlar?”moda. (Qring)
Qt.Ölçüyəgəlmə Əqrəb Baxış üçün veriləcək maddə üçün ölçüsü işarəsi. (QSize)

Mövcud olan tam siyahı üçün rol Qt iTmdatarole sənədlərini görə biləcəyiniz. Todo siyahımız yalnız QT istifadə edəcəkdir.DisplayRole və Qt.Dekorasiya .

Əsas tətbiqetmə

Aşağıda UI yükləmək və göstərmək üçün lazım olan əsas kötük tətbiqidir. Model kodu və tətbiq məntiqimizi bu bazaya əlavə edəcəyik.

PYQT5, QTGUI, QTWidgets, UIC-dən PYQT5-dən istifadə edin.Qtcore idxal qt_creator_file = "mainwindow.Ui "Ui_mainwindow, QTBaseClass = UIC.Loaduduype (qt_creator_file) sinif toomodel (qtcore).QabstractListModel): def __init __ (Öz-özünə, * args, todos = heç biri, ** kwargs): Super (toomodel, özünü).__init __ (* args, ** kwargs) özünü.TODOS = TODOS və ya [] DEF məlumatları (öz-özünə, indeks, rol): rol == qt varsa.DisplayRole: status, mətn = özünü.TODOS [indeksi.Sıra ()] Mətn Def Rowcount (özünü, indeks) qaytarın: Len (Özü) qaytarın.Todos) Class Mainwindow (Qtwidgets).Qmaainwindow, ui_mainwindow): def __init __ (özünü): qtwidgets.Qumaainwindow.__init __ (özünü) ui_mainwindow.__init __ (özünü) özünü.Setupui (özünü) özünü.Model = toomodel () özünü.todview.Setmodel (özünü.Model) tətbiqi = qtwidgets.Qapplication (Sys.Argv) pəncərə = mainwindow () pəncərə.Şou () tətbiqi.Exec_ () 

Biz əvvəllər olduğu kimi toomodelimizi müəyyənləşdiririk və anawindow obyektini işə salırıq. MainWindow üçün __InIT__-də TODO modelimizin nümunəsi yaradırıq və bu modeli Todo_View-də təyin edirik . Bu faylı toDo kimi saxla.Py və onu idarə et –

python3 todo.tempi 

Hələ görmək üçün çox şey olmasa da, QlistView və modelimiz əslində işləyir – bəzi standart məlumat əlavə etsəniz, bu siyahıda göründüyünü görəcəksiniz.

öz-özünə.Model = Todomodel (Todos = [(FALSE, 'ilk toDo')])))) 

QlistView, sərt kodlu todo elementini göstərir

QlistView, sərt kodlu todo elementini göstərir

Bunu bu kimi əl ilə əlavə etməyə davam edə bilərsiniz və onlar QlistView-də göstəriləcəklər . Sonra tətbiq daxilində itmləri əlavə etmək mümkün olacağıq.

Əvvəlcə ADDED adlı anawindow-da yeni bir üsul yaradın . Bu, mövcud mətni girişdən yeni bir toDo kimi əlavə etməklə yanaşacaqdır. Bu üsulu AddButton-a qoşun.__İnit__ blokunun sonunda basılmış siqnal.

Sinif Mainwindow (Qtwidgets).Qmaainwindow, ui_mainwindow): def __init __ (özünü): qtwidgets.Qumaainwindow.__init __ (özünü) ui_mainwindow.__init __ (özünü) özünü.Setupui (özünü) özünü.Model = toomodel () özünü.todview.Setmodel (özünü.Model) # düyməni qoşun. öz-özünə.addbutton.basmaq.Qoşun (özünü).Əlavə et) Def Əlavə et (Öz): "" QlineDitdən mətn alaraq, todo siyahımıza bir element əlavə edin .Todoedit və orada təmizlənir. "" "Mətn = özünü.toditit.Mətn () mətn varsa: # Boş iplər əlavə etməyin. # Model vasitəsilə siyahıya daxil olun. öz-özünə.model.todos.Əlavə ((saxta, mətn)) # trigger yeniləmə. öz-özünə.model.lay-lay.Emit () # giriş özünü boşaldın.toditit.Settext ("") 

Əlavə et blokunda Xətt Özünə baxın.model.lay-lay.Emit () . Burada bir model siqnalı yayırıq .Görünüşün bunu bilməsi üçün layoutschanged formalaşdırmaq məlumatların dəyişdirilmişdir. Bu, görmə qurumunun təzələnməsini tetikler. Bu xətti buraxsanız, Todo yenə də əlavə olunacaq, ancaq QlistView yeniləməyəcək.

Yalnız məlumatlar dəyişdirilirsə, ancaq satır / sütunların sayı istifadə edə biləcəyiniz təsirsizdir .Əvəzinə məlumat işarəsi () siqnal. Bu, eyni zamanda bütün görünüş görünüşünü yenidən qurtarmaq üçün yuxarı sol və alt sağ icarədən istifadə edərək məlumatlarda dəyişdirilmiş bir bölgəni müəyyənləşdirir.

Digər hərəkətləri bağlayır

İndi düymənin qalan hissəsini bağlaya və performans üçün köməkçi əlavə edə bilərik silməktamamlamaq əməliyyatlar. Düymə siqnallarını əvvəlki kimi __init__ blokuna əlavə edirik.

 öz-özünə.addbutton.basmaq.Qoşun (özünü).Əlavə edin) özünü.seletebutton.basmaq.Qoşun (özünü).Silmək) özünü.Kopyalamaq.basmaq.Qoşun (özünü).Tam) 

Sonra aşağıdakı kimi yeni bir silinmə üsulunu müəyyənləşdirin –

 Def silmək (özünü): indekslər = özünü.todview.SeçilmişDindexes () İndekslər varsa: # indekslər tək bir elementin siyahısıdır. Index = indekslər [0] # elementi çıxarın və yeniləyin. Deln.model.TODOS [indeksi.Sıra ()]).model.lay-lay.Emit () # seçimi təmizləyin (uzun müddət etibarlı deyil). öz-özünə.todview.PlarSelection () 

Özünü istifadə edirik.todview.indeksləri əldə etmək üçün seçilmişdindEndexes (əslində tək bir maddənin siyahısı, biz tək seçim rejimində olduğu kimi) və sonra .Cərgə () modelimizdəki toDos siyahımıza bir indeks olaraq. Biz Python’un Del Operatoru istifadə edərək indekslənmiş elementi silirik və sonra məlumatların forması dəyişdirildiyi üçün layoutschanged siqnalını tetikler.

Finallyly, indi hüdudlarından (sonu seçmisinizsə) aid olan məhsuldan bəri aktiv seçimini təmizləyirik.

Bu santeranı etməyə cəhd edə bilərsiniz və bunun əvəzinə siyahıdakı son elementi seçin

Tam metod bu kimi bəyənir –

 Def Tam (Öz): indekslər = özünü.todview.Selectedindexes () İndekslər varsa: indeks = indekslər [0] Row = indeks.Sıra () statusu, mətn = özünü.model.TODOS [RARD] Özü.model.TODOS [RARS] = (Doğru, Mətn) # .Datachanged, tək bir seçim üçün bərabər olan üst sol və alt sağa alır. öz-özünə.model.difachanged.Emit (indeks, indeks) # seçimi təmizləyin (uzun müddət etibarlı deyil). öz-özünə.todview.PlarSelection () 

Bu silmək üçün eyni indeksdən istifadə edir, ancaq bu dəfə maddəni modeldən alırıq .TODOS siyahısı və sonra vəziyyəti doğru ilə əvəz edin .

Məlumatlarımızın dəyişdirilə bilməyən piton tüpləri kimi saxlanıldığı üçün bu alıcı və dəyişdirmə etməliyik.

Burada fərqli olan açar. Standart QT Widgets, birbaşa məlumatlarımıza dəyişiklik etdiyimiz və Haasurd-u dəyişdirən Qt-ı bildirməyimizə ehtiyac duyuruq – Widget vəziyyətini yeniləmək avtomatik olaraq idarə olunur.

Qt istifadə.Dekorasiya

Tətbiqi indi işə salsanız, hər iki işi əlavə etmək və silmək üçün tapmalısınız, ancaq maddələri tamamlayarkən, görünüşdə bunun əlaməti yoxdur. Bir maddənin tamamlandıqda görüntüləmək üçün bir göstərici ilə görüşü təmin etmək üçün modelimizi yeniləməliyik. Yenilənmiş model aşağıda göstərilir.

Gənə = qtgui.Qimage ('işarəsi).png ') sinif toomodel (qtcore).QabstractListModel): def __init __ (Öz-özünə, * args, todos = heç biri, ** kwargs): Super (toomodel, özünü).__init __ (* args, ** kwargs) özünü.TODOS = TODOS və ya [] DEF məlumatları (öz-özünə, indeks, rol): rol == qt varsa.DisplayRole: _, mətn = özünü.TODOS [indeksi.Sıra ()] rol varsa mətni qaytarın == QT.DekorasiyaRole: status, _ = özünü.TODOS [indeksi.Sıra ()].todos) 

Bir gənə icon işığından istifadə edirdilər.Gənə adlı bir qimaj obyektinə yüklədiyimiz tam əşyaları göstərmək üçün PNG . Modeldə QT üçün bir işləmə imkanı verdik.Statusu olan satırlar üçün gənə simgesini qaytaran bəzəkolyasiya (tam üçün).

İstifadə etdiyim simge, pugue dəstindən p ilə götürülür.yusukekamiyamane

Bir I simge instad, rəngə qayıda bilərsiniz, e.g. Qtgui.Qatı meydan kimi çəkiləcək Qlaqr (yaşıl ‘).

Tətbiqin işlədilməsi indi əşyaları tam olaraq qeyd edə bilməlisiniz.

TODOS Tamamlanmışdır

TODOS Tamamlanmışdır

Bir data mağaza

Todo tətbiqi gözəl işləyir, ancaq bir ölümcül qüsuru var, tətbiqi bağladığınız müddətdə tətbiqi bağladığınız anda, Zen, uzunmüddətli hisslərin qısa müddətli hisslərinə töhfə vermək üçün heç bir işiniz varsa, toDosunuzu bağlayır Pis fikir.

Həll, DISTER DATIE Mağazasının bəzi yayımlarını həyata keçirməkdir. Ən sadə yanaşma sadə bir fayl mağazasıdır, burada bir JSON və ya başlanğıcda turşu faylından əşyalar yüklədiyimiz və dəyişdirin.

Bunu etmək üçün əlimizdə iki yeni üsulu müəyyənləşdiririk . Bir JSON Fayl Adı Məlumatlarından Bu yük məlumatları.JSON (əgər varsa, səhvinə məhəl qoymadan) özünü göstərmək olarsa.model.TODOS və hazırkı özünü yazın.model.Müvafiq olaraq eyni fayla todos.

 Def yükü (özünü): cəhd edin: açıq ('məlumatlar).json ',' r ') kimi f: özünü.model.Todos = json.Yük (F) İstisna istisnası istisnası: keçin DEF Saxla (Öz): Açıq ('Məlumat).JSON ',' W ') kimi F: Məlumat = JSON.Dump (özünü.model.todos, f) 

Əlavə etməli olduğumuz məlumatlara dəyişiklikləri davam etdirmək .Saxla () məlumatları dəyişdirən hər hansı bir metodun sonuna qədər və .Yükləmə () model yaratdıqdan sonra __init__ blokuna işləyin.

Son kod bu kimi görünür –

Sys Import JSON, PYQT5 idxal qtcore, qtgui, qtwidgets, uic-dən, PYQT5.Qtcore idxal qt_creator_file = "mainwindow.Ui "Ui_mainwindow, QTBaseClass = UIC.Loadudusype (qt_creator_file) gənə = qtgui.Qimage ('işarəsi).png ') sinif toomodel (qtcore).QabstractListModel): def __init __ (Öz-özünə, * args, todos = heç biri, ** kwargs): Super (toomodel, özünü).__init __ (* args, ** kwargs) özünü.TODOS = TODOS və ya [] DEF məlumatları (öz-özünə, indeks, rol): rol == qt varsa.DisplayRole: _, mətn = özünü.TODOS [indeksi.Sıra ()] rol varsa mətni qaytarın == QT.DekorasiyaRole: status, _ = özünü.TODOS [indeksi.Sıra ()].Todos) Class Mainwindow (Qtwidgets).Qmaainwindow, Ui_MAinWindow): def __init __ (Öz): Super (Mainwindow, Öz).__İnit __ () özünü.Setupui (özünü) özünü.Model = toomodel () özünü.Yük () özünü.todview.Setmodel (özünü.Model) özünü.addbutton.basmaq.Qoşun (özünü).Əlavə edin) özünü.seletebutton.basmaq.Qoşun (özünü).Silmək) özünü.Kopyalamaq.basmaq.Qoşun (özünü).Tamamilə) DEF əlavə et (Öz): "" "QlineDitdən mətni əldə etmək üçün Todo siyahımıza bir element əlavə edin .Todoedit və orada təmizlənir. "" "Mətn = özünü.toditit.Mətn () mətn varsa: # Boş iplər əlavə etməyin. # Model vasitəsilə siyahıya daxil olun. öz-özünə.model.todos.Əlavə ((saxta, mətn)) # trigger yeniləmə. öz-özünə.model.lay-lay.Emit () # giriş özünü boşaldın.toditit.Settext ("") özünü.Saxla () def silmək (öz): indekslər = özünü.todview.SeçilmişDindexes () İndekslər varsa: # indekslər tək bir elementin siyahısıdır. Index = indekslər [0] # elementi çıxarın və yeniləyin. Deln.model.TODOS [indeksi.Sıra ()]).model.lay-lay.Emit () # seçimi təmizləyin (uzun müddət etibarlı deyil). öz-özünə.todview.Personajı () özünü.Saxla () Def Tam (Öz): indekslər = özünü.todview.Selectedindexes () İndekslər varsa: indeks = indekslər [0] Row = indeks.Sıra () statusu, mətn = özünü.model.TODOS [RARD] Özü.model.TODOS [RARS] = (Doğru, Mətn) # .Datachanged, tək bir seçim üçün bərabər olan üst sol və alt sağa alır. öz-özünə.model.difachanged.Emit (indeks, indeks) # seçimi təmizləyin (uzun müddət etibarlı deyil). öz-özünə.todview.Personajı () özünü.Saxla () def yükü (özünü): cəhd edin: açıq ('məlumat).db ',' r ') kimi f: özünü.model.Todos = json.Yük (F) İstisna istisnası istisnası: keçin DEF Saxla (Öz): Açıq ('Məlumat).db ',' w ') kimi f: məlumat = json.Dump (özünü.model.todos, f) app = qtwidgets.Qapplication (Sys.Argv) pəncərə = mainwindow () pəncərə.Şou () tətbiqi.Exec_ () 

Tətbiqinizdəki məlumatlar böyük və ya daha mürəkkəb əldə etmək potensialı varsa, onu saxlamaq üçün əsl məlumat bazasından istifadə etmək üçün önə keçə bilərsiniz. Bu vəziyyətdə model interfeysi bazaya sarılacaq və birbaşa məlumat üçün birbaşa sorğu edəcəkdir. Bunu qarşıdakı bir dərslikdə necə edəcəyinizi l’ll əhatə edir.

Bir QlistView-in digər maraqlı bir nümunəsi üçün bu nümunə media pleyer tətbiqinə baxın. QT binasının QMediaplaylist, məzmunu bir QlistView-a göstərdiyi məlumat bazası kimi istifadə edir .

BCR haqqında.CX:

Brcr.CX, həm də həm müəssisələrin, həm də, həm də BPO) və biznes mühiti Xaricdə (BEO), həm də tələbat nəslinin, müştəri təcrübəsi, rabitə, rabitə, istifadəçi dəstəyi və məmnuniyyətə yönəlmiş bir Braziliya texnologiyası başlanğıcdır.

Təsvir:

Todo tətbiqi iş günləri zamanı agentin qeydlərini saxlamaq üçün sürətli, təhlükəsiz və istifadəçi dostu bir yol kimi hazırlanmışdır.

Hər bir fərdi bilet və ya müştəri əsasında öz vəzifələrinizi yarada və idarə edə bilmək.

Yolları yaradın və iş axınını düzəldin

Məhsuldarlıq artırmaq! Todo tətbiqindən istifadə edərək təkrarlanan prosesləri standartlaşdırmaq üçün xüsusi iş axını yarada bilərsiniz. İndi cəhd edin və todos və dones kimi tərəqqinizi idarə etməyə başlayın.

Resurslar:

  1. Hər bilet üçün tapşırıqlar yaradın
  2. Çatdırılmanı izləmək üçün tərəqqi çubuğu
  3. Məhsuldarlığı artırmaq üçün standart iş axını yaradın.
  4. Gündəlik işinizlə davam etmək üçün tapşırıq siyahısınızı idarə edin.
  1. Tətbiq xüsusiyyətləri üzərində tam giriş əldə etmək üçün həm Todo, həm də Zendesk Sunshine yığın
  2. Tapşırıqların avtomatlaşdırmalarını yaratmaq və ya redaktə etmək və ya redaktə etməklə məhsuldarlığı təkmilləşdirin və fərdiləşdirilmiş hafızaları saxla.