TODO a Mac App Store -on, a PYQT5 ModelView Architecture használatával egy egyszerű TODO alkalmazást készíteni
A ModelView architektúra QT S MVC-szerű interfész az adatok megjelenítéséhez a nézetekben
Contents
- 1 A ModelView architektúra QT S MVC-szerű interfész az adatok megjelenítéséhez a nézetekben
A futó alkalmazás az alábbiakban látható.
Todo 4+
Több éven át ezt az alkalmazást az iPad -en, az iPhone -on és a MacBookPro -on használtam. Ha ez továbbra is tökéletesen működik az iOS -on, úgy tűnik, hogy nem követte teljesen a MACOS fejlődését.
Nincs probléma a telepítésével. De már nem lehet szinkronizálni a Toodledo -val a MacOS -on, miközben az iOS -on továbbra is lehetséges: ugyanazokat az azonosítókat nem ismerik fel.
Ezért feleslegessé válik számomra … és úgy tűnik, hogy az Appigo támogatása nem siet, hogy választ adjon a kérésemre. Mindig kellemetlen megjegyezni, hogy az ügyfél fogalma minden nap egy kicsit többet veszít annak értékéből.
Pisa D
A frissítés óta elvesztettem az összes listámat a 12 -es számban, és amellyel profi módon dolgozom. Körülbelül 200 foltot kezelek véglegesen, ez a frissítés hónapokig tartó megpróbáltatást tett ! A listában szervezett összes feladat egyetlen globális listába került. Természetesen nem ez a hiba, ami arra készteti, hogy átadjam a szoftver profi profi verzióját, egyébként kiváló. Soha nem leszek fogságban. Csak számomra az, hogy megvárjam a ma este e -mailben felvett támogatás válaszát, majd megtalálom ennek a csodálatos szoftvernek a régi verzióját. Nagyon remélem, hogy ez az új verzió fiatalos beugrása, és nem egy stratégia, amely arra kényszerítheti, hogy a fizetett Pro verzióba migráljon, hogy megtalálja az előző verzióval már megszerzett funkciókat. Információért a szinkronizálásom a Dropbox -szal történik
SurlePoint, 2011.12.13
A szinkron most nikkel
Megragadtam a szinkronizálás előtt, amely lassú volt, rosszul sétáltam stb. De most az iCloud -val tökéletesen megfelel nekem.
Néhány lehetséges fejlesztés: További megjelenítési beállítások.
– Csak azt jelenítse meg, amit a felhasználó használ. Például nem használok kontextusokat vagy címkéket (mindenesetre még nem), és azt szeretném, ha már nem jelenítsem meg ezeket a lehetőségeket, amelyek “szennyezik” a todo -t. Szeretném, ha csak “dátum / prioritás / lista / típus” lenne a mindennapi jegyzeteimhez, és a jobb egérgombbal kattintson a ritkán használt lehetőségekhez
– És fordítva, szeretnék egy egyszerű PLSU -kijelzőt, mint egy csepp -d -lejtő menü, hogy válassza ki a dátumot, a prioritást, a listát, … ha csak három listám van, akkor három gomb elegendő lenne a megjelenítéshez, és kiválaszthatnám a listámat Egy kattintással, ahelyett, hogy a csepp -d -leállító menüre kattintana, keresse meg a nevet, és kattintson rá. (Ditto a prioritás szempontjából, főleg, hogy a Todo listán szereplő nagyon vizuális rajzról a néven a név választására lépünk, amely nem túl természetes.
Ezek ergonómiai részletek. Szeretem a Todo egyszerűségét és hatékonyságát, ezért szeretném, ha ez még konfigurálhatóbb lehet, hogy még egyszerűbb legyen.
Adatvédelmi alkalmazás
A fejlesztő, az APPIGO, nem nyújtott be részleteket a magángyakorlatáról és az adatok kezeléséről az Apple számára. További információkért lásd a fejlesztés adatvédelmi irányelveit.
A modellview architektúra
A QT MVC-szerű felülete az adatok megjelenítéséhez a nézetekben
Ahogy elkezdi összetettebb alkalmazásokat építeni a PYQT5 -rel, valószínűleg találkozik a kütyükkel szinkronban tartva az adatokkal. A kütyüben tárolt adatok (e.g. Egy egyszerű qlistWidget) nem áll rendelkezésre könnyen manipulálható a Python -ból – a változások megkövetelik, hogy egy elemet szerezzenek, az adatokat megszerezzék, majd állítsák be. Ennek alapértelmezett megoldása az, hogy egy külső adat reprezentációt tartson a Python -ban, majd az Eith Duplicate frissítéseit mind az adatok, mind a widget számára, vagy egyszerűen átírja a WiHole Widget -t az adatokból. Ez gyorsan csúnya lehet, és sok kazánlapot eredményez az adatok hegesztésére.
Szerencsére a QT -nek van megoldása erre – ModelViews. A ModelViews hatékony alternatíva a szokásos kijelző kütyünek, amelyek rendszeres modellfelületet használnak az adatforrásokkal való interakcióhoz – az egyszerű adatszerkezetektől a külső adatbázisokig. Ez elkülöníti az adatait, lehetővé téve, hogy bármilyen szerkezetben tartsa, míg a nézet gondoskodik a bemutatásról és a frissítésekről.
Ez az oktatóanyag bemutatja a QT ModelView architektúrájának legfontosabb szempontjait, és felhasználja azt egyszerű asztali todo alkalmazás felépítésére a PYQT5 -ben.
Modell nézetvezérlő
Modell – Lásd – Vezérlő (MVC) egy építészeti minta használata a fejlesztési felhasználói felületekhez, amelyek az alkalmazást három összekapcsolt részre osztják. Ez elválasztja az adatok belső ábrázolását az információk bemutatásának és elfogadásának módjától.
Az MVC Design Pattenn három fő alkotóelem –
- Modell Tartja azt az adatszerkezetet, amelyben az alkalmazás dolgozik.
- Kilátás az információk bármilyen ábrázolása, amint azt a felhasználó mutatja, ahol grafikus vagy táblázat. Ugyanazon adatmodell több nézete megengedett.
- Ellenőrzés Elfogadja a felhasználótól való bemenetet, átalakítva azt a modellre vagy a nézetre történő parancsokká.
Qt földel, a nézet és a vezérlő közötti különbség kissé zavaros lesz. A QT elfogadja a felhasználó bemeneti eseményeit (az operációs rendszeren keresztül), és ezeket a kezeléshez a kütyüre (vezérlőre) delegálja. A kütyü azonban az aktuális állapot bemutatását is kezeli a felhasználó számára, és egyértelműen a nézetbe helyezi őket. Ahelyett, hogy a vonalat a vonal húzása, a qt-S-beszélgetésben a nézet és a vezérlő egyesítve egyesítve, hogy egy modell/nézetvonstroller architektúra “modell nézet” -nek hívjon, az egyszerűség kedvéért.
Fontos szempont, hogy a megkülönböztetés a adat és Hogyan mutatják be megőrzik.
A modell nézet
A modell az adattár és a ViewController közötti interfészként működik. A modell tartalmazza az adatokat (vagy erre hivatkozást), és ezeket az adatokat egy szabványosított API -n keresztül mutatja be, amely megtekinti, majd fogyaszt és bemutat a felhasználó számára. Több nézet megoszthatja ugyanazokat az adatokat, teljesen más módon bemutatva.
Bármely “adattárolót” használhat modelljéhez, tartalmazhat például egy standard Python listát vagy szótárot, vagy egy adatbázist (E -n keresztül.g. Sqlalchemy) – ez rajtad múlik.
A két rész lényegében felelős a –
- Tea modell Tárolja az adatokat, vagy hivatkozik rá, és visszaadja az egyéni vagy a nyilvántartási tartományokat, valamint a kapcsolódó metaadatokat vagy kijelző utasítás.
- Tea Kilátás Adatokat kér a modelltől, és megjeleníti a widget visszaküldését.
A dokumentációban mélyreható vita folyik a QT architektúráról.
A Python GUI alkalmazások csomagolásának teljes útmutatója a Pyinstaller segítségével.
[[kedvezmény.Diszkont_pc]]]% off a következő [kedvezmény.Időtartam]] [Kedvezmény.Leírás]] a kóddal [kedvezmény.Kupon kód]]
Vásárlóerő -paritás
Az [[country]] fejlesztői [[kedvezmény.diszkont_pc]]] az összes könyv és tanfolyamon ki van kapcsolva [kedvezmény.Kupon kód]]
Egy egyszerű modell nézet – egy TODO lista
Annak bemutatása érdekében, hogyan lehet a ModelViews gyakorlatban használni, összeállítunk egy nagyon egyszerű megvalósítást egy asztali todo listára. Ez egy qlistView -ból áll az elemek listájához, egy qLineEdit új elemek beírásához, és egy gombkészletből, amely hozzáadható, törölhető vagy meg kell jelölni az elemeket.
A felhasználói felület
Az egyszerű felhasználói felület csúnya volt a QT készítője, és megmentette a MainWindow -t.UI . Tea .UI fájl és az összes többi alkatrész az alábbiakban tölthető le.
Egy egyszerű TODO alkalmazás tervezése a QT Creator -ban
A futó alkalmazás az alábbiakban látható.
A futó todo gui (még semmi sem működik)
A felületen elérhető kütyü.
objeuch | Kedves | Leírás |
---|---|---|
todview | QlistView | A jelenlegi Todos listája |
todrus | QLineEdit | A szöveg bemenete egy új TODO elem létrehozásához |
addbutton | Qpushbutton | Hozzon létre az új Todo -t, hozzáadva azt a Todos listához |
DeleteButton | Qpushbutton | Törölje az aktuális kiválasztott TODO -t, eltávolítva azt a Todos listából |
Komplettgutton | Qpushbutton | Jelölje meg az aktuális kiválasztott TODO -t |
Ezeket az azonosítókat használjuk később az alkalmazás logikájának összekapcsolására.
A modell
Az egyéni modellünket a megvalósításból való osztályozással definiáljuk, lehetővé téve számunkra, hogy a modellünkre egyedi részekre összpontosítsunk. A QT számos különféle modellbázist biztosít, beleértve a listákat, fákat és asztalokat (ideális táblázatokhoz).
Ebben a példában az eredményt QlistView -nak jelenítjük meg . Ennek megfelelő bázismodellje a QabstractListModel . Az alábbiakban látható a modellünk vázlat meghatározása.
Osztály toomodel (qtcore.QabstractListModel): def __init __ (self, *args, todos = nincs, ** kwargs): szuper (toDomodel, self).__init __ (*args, ** kwargs) én.todos = todos vagy [] def data (self, index, szerep): ha szerepe == qt.DisplayRole: # Lásd alább az adatszerkezetet. Állapot, szöveg = én.Todos [index.ROW ()] # csak a todo szöveget adja vissza. Visszatérő szöveg def rowcount (self, index): return len (self.todos)
Tea .A Todos Variable az adattárolásunk, és a két módszer, a RowCount () és a Data () standard modell módszerek, amelyeket egy listamodellhez kell. Az alábbiakban átéljük ezeket.
.Todos lista
A modellünk adattárolása az .Todos, egy egyszerű Python -listát, amelyben az értékek tuple -t tároljuk a formátumban [(bool, str), (bool, str), (bool, str)], ahol a bool a bool a ebből adódóan egy adott bejegyzés állapota, és a STR a TODO szövege.
Inicializáljuk az önmagát.TODO az indítás üres listájához, kivéve, ha egy lista kerül átadásra a Todos kulcsszó argumentumán keresztül.
maga.todos = todos vagy [] önmagát állítja be.todos a megadott Todos -értékhez, ha van színpad (én.E. Bármi más, mint egy üres lista, a logikai hamis vagy az alapértelmezett érték), különben az üres listára állítja [] .
Ennek a modellnek a betartása létrehozásához egyszerűek lehetünk –
Model = TODomOdel () # Hozzon létre egy üres TODO listát
Vagy átadni egy meglévő listán –
todos = [(hamis, 'egy elem'), (hamis, 'újabb elem')] Model = tdomodel (Todos)
.RowCount ()
Tea .A RowCount () módszert az a nézet, hogy megkapja a sorok számát az aktuális adatokban. Erre a nézethez szükséges a maximális index, amelyet újrahasznosíthat az adattárolás (ROW Count-1). Eladás Python listát használunk adattárolóként.
.Adatok ()
Ez a modell lényege, amely a nézetből kezeli az adatkéréseket, és visszaadja a megfelelő eredményt. Két paraméter -indexet és szerepet kap.
Az index az adatok helyzete/koordinátái, amelyeket a nézet kér, két módszerrel elérhető .Sor () és .oszlop (), amelyek minden dimenzióban megadják a helyzetet.
A QlistView -nál az oszlop mindig 0, és figyelmen kívül hagyható, de ezt a 2D -adatokhoz kell használni egy táblázatnézetben.
A szerep a kedves adatok száma A nézet kéri. Ennek oka az, hogy a .A data () módszer valójában több felelősséggel tartozik, mint csak az alapvető adatok. Ezenkívül kezeli a stílusinformációk, eszköztippek, állapotrudak stb. – Bailálisan bármi, amit maga az adatok tájékoztathatnak.
A QT elnevezése.A DisplayRole kissé furcsa, de ez azt jelzi, hogy a Kilátás azt kérdezi tőlünk: “Kérjük, adjon nekem adatokat a kijelzőhöz”. Vannak mások is szerepek Amelyet az adatok megkaphatnak a stíluskérelmekhez vagy az adatok kérésére “szerkesztés-kész” formátumban.
Szerep | Érték | Leírás |
---|---|---|
QT.Kijelző | 0 | A legfontosabb adatok, amelyeket szöveg formájában kell megadni. (QString) |
QT.Dekoráció | 1 | Az ikon formájában dekorációként kell megjeleníteni az adatokat. (QColor, QICON vagy QPIXMAP) |
QT.Szerkesztőségi | 2 | A szerkesztés szerkesztésének hivatalos követésére vonatkozó adatok a szerkesztéshez. (QString) |
QT.Szerszámtiprole | 3 | Az elem eszköztippében megjelenített adatok. (QString) |
QT.Statustiprole | 4 | Az állapotsorban megjelenített adatok. (QString) |
QT.Whatthisrole | 5 | Az elemre megjelenített adatok a “Mi ez?”A divat. (QString) |
QT.Méret | 13 | A nézetekhez mellékelt tétel méretének tippe. (QSize) |
A rendelkezésre álló teljes listáról szerepek hogy megkaphatja a QT itmdatarole dokumentációt. A TODO listánk csak a QT -t használja.Displayrole és qt.Dekoráció .
Alapvető megvalósítás
Az alábbiakban az alapvető csonk alkalmazás szükséges a felhasználói felület betöltéséhez és annak megjelenítéséhez. Hozzáadjuk a modellkódot és az alkalmazás logikáját ehhez az alaphoz.
Import Sys a pyqt5 -ből Import qtcore, qtgui, qtwidgets, UIC a pyQT5 -ből.Qtcore Import qt_creator_file = "mainwindow.ui "ui_mainwindow, qtBaseclass = uic.LoadUduype (qt_creator_file) osztály toDomodel (qtcore.QabstractListModel): def __init __ (self, *args, todos = nincs, ** kwargs): szuper (toDomodel, self).__init __ (*args, ** kwargs) én.todos = todos vagy [] def data (self, index, szerep): ha szerepe == qt.DisplayRole: Állapot, szöveg = önmag.Todos [index.ROW ()] Visszaadási szöveg def RowCount (self, Index): Visszatérés len (self.Todos) osztály MainWindow (qtwidgets.QMainWindow, UI_MainWindow): def __init __ (ön): qtwidgets.Qumainwindow.__init __ (self) ui_mainwindow.__init __ (én) én.Setupui (self) én.Model = tomodel () én.todview.SetModel (én.Model) App = QTWidgets.QApplication (SYS.Argv) ablak = mainwindow () ablak.Show () alkalmazás.Exec_ ()
Meghatározzuk a ToDomodelünket, mint korábban, és inicializáljuk a MainWindow objektumot. A MainWindow __init__ -ban létrehozunk egy példányt a TODO modellről, és beállítjuk ezt a modellt a TODO_VIEW -en . Mentse el ezt a fájlt TODO -ként.Py és futtassa azt –
python3 todo.ütem
Noha még nincs sok látnivaló, a QlistView és a modellünk valójában működik – ha hozzáad néhány alapértelmezett adatot, akkor a listában jelenik meg.
maga.Model = tomodel (todos = [(hamis, 'első todo')])))
QlistView, amely a kemény kódolású Todo elemet mutat
Az elemeket manuálisan is hozzáadhatja, és ezek sorrendben jelennek meg a QlistView -ban . Ezután lehetővé tesszük az ITM hozzáadását az alkalmazáson belül.
Először hozzon létre egy új módszert a MainWindow nevű addon . Ez a visszahívásunk, amely gondoskodik arról, hogy az aktuális szöveget a bemenetből új TODO -ként adja hozzá. Csatlakoztassa ezt a módszert az AddButtonhoz.Megnyomta a jelet az __init__ blokk végén.
Osztály MainWindow (QTWidgets.QMainWindow, UI_MainWindow): def __init __ (ön): qtwidgets.Qumainwindow.__init __ (self) ui_mainwindow.__init __ (én) én.Setupui (self) én.Model = tomodel () én.todview.SetModel (én.Modell) # csatlakoztassa a gombot. maga.addbutton.nyomja meg.Csatlakoztasson (én.Add) def hozzáadás (self): "" Adjon hozzá egy elemet a TODO listájához, a szöveget a QLineEdit -ről .Todoedit és ott tisztázva. "" "szöveg = én.todrus.Text (), ha szöveg: # Ne adjon hozzá üres karakterláncokat. # Hozzáférhet a listához a modell segítségével. maga.modell.todosz.Függelék ((hamis, szöveg)) # trigger frissítés. maga.modell.elrendezett.Bocsátja ki () # ürítse ki a bemeneti önmagát.todrus.SetText ("")
A hozzáadási blokkban észrevegye a vonal önmagát.modell.elrendezett.Kibocsátás () . Itt egy modelljelet bocsátunk ki .elrendezve, hogy tudatja a nézetet, hogy a alak az adatok megváltoztatása megváltozott. Ez a nézet entitásának frissítését váltja ki. Ha kihagyja ezt a sort, akkor a TODO -t továbbra is hozzáadják, de a QlistView nem frissíti.
Ha csak az adatok megváltoznak, de a sorok/oszlopok száma nem érinti, akkor használhatja a .DataChanged () jel helyett. Ez meghatározza az adatokban lévő megváltozott régiót is a bal felső és a jobb alsó bérleti díj segítségével, hogy elkerülje a teljes nézet újracserét.
A többi művelet összekapcsolása
Most csatlakoztathatjuk a gomb többi jelét, és hozzáadhatunk segítséget a teljesítményhez töröl és teljes tevékenységek. A gombjeleket hozzáadjuk az __init__ blokkhoz, mint korábban.
maga.addbutton.nyomja meg.Csatlakoztasson (én.Add) én.DeleteButton.nyomja meg.Csatlakoztasson (én.Törölje) én.Komplettgutton.nyomja meg.Csatlakoztasson (én.Teljes)
Ezután határozzon meg egy új törlési módszert az alábbiak szerint –
DEF DELETE (self): indexek = self.todview.selectedDindexes (), ha indexek: # indexek az egyetlen elem listája az egyválasztásban. Index = index [0] # Távolítsa el az elemet és frissítse. Del self.modell.Todos [index.Sor ()] én.modell.elrendezett.Bocsátás () # törölje a választást (mivel ez nem régóta érvényes). maga.todview.ClarSelection ()
Önt használjuk.todview.SelectedDindexes az indexek (valójában egyetlen elem listájának, mint egyválasztási módban), majd a .Sor () indexként a modellünkben szereplő Todos listájába. Töröljük az indexelt elemet a Python del operátorával, majd elindítunk egy LayoutChanged jelet, mert az adatok alakját módosítottuk.
Végső soron tisztítjuk meg az aktív választást, mivel az a tétel, amelyre vonatkozik, most már nem korlátozható (ha az utolsó elemet választotta).
Kipróbálhatja ezt az intelligenset, és inkább a listában szereplő utolsó elemet válassza ki
A teljes módszer kedveli –
DEF teljes (self): indexek = self.todview.SelectRedIndexes (), ha indexek: index = index [0] sor = index.Sor () status, text = én.modell.Todos [sor] önmaga.modell.Todos [sor] = (igaz, szöveg) # .A DataChanged a bal felső és a jobb alsó és a jobb alsó részét veszi figyelembe, amelyek egyenlőek # egyetlen választáshoz. maga.modell.datachanged.Kibocsátás (index, index) # törölje a kiválasztást (mivel ez nem régóta érvényes). maga.todview.ClarSelection ()
Ez ugyanazt az indexelést használja, mint a törléshez, de ezúttal az elemet a modellből letöltjük .Todos listája, majd cserélje ki az állapotot az igazra .
Meg kell tennünk ezt a letöltési és csereprogramot, mivel adatainkat Python-tuplákként tároljuk, amelyeket nem lehet módosítani.
A kulcs más itt vs. A standard QT -kütyük az, hogy közvetlenül az adatainkra változtatunk, és egyszerűen értesíteni kell a QT -t a Haasurd megváltoztatásáról – A widget állapot frissítése automatikusan kezelhető.
A QT használatával.Dekoráció
Ha most futtatja az alkalmazást, akkor azt kell találnia, hogy mindkét munka hozzáadása és törlése, de az elemek kitöltése közben nem jelzi, hogy a nézetben nincs jelölve. Frissítenünk kell a modellünket, hogy a kilátást jelzőkészülékkel biztosítsuk, amikor egy elem befejeződött. A frissített modell az alábbiakban látható.
Jelölje meg = qtgui.Qimage ('Jelölje be.Png ') osztály ToDomodel (qtcore.QabstractListModel): def __init __ (self, *args, todos = nincs, ** kwargs): szuper (toDomodel, self).__init __ (*args, ** kwargs) én.todos = todos vagy [] def data (self, index, szerep): ha szerepe == qt.Displayrole: _, text = self.Todos [index.Sor ()] visszaadási szöveget, ha szerepe == qt.Decorationrole: status, _ = én.Todos [index.ROW ()] Ha állapot: Visszatérés Jog Def RowCount (self, Index): Visszatérés len (self.todos)
Kullancs ikon kullancsot használtak.PNG a teljes elemek jelzésére, amelyeket betöltünk egy kullancs nevű Qimage objektumba . A modellben a QT -hez képest behatoltuk a kezelőt.A dekoráció, amely visszatér a kullancs ikont a sorokhoz, akik igazak (teljes).
Az általam használt ikont a P által a Puga -ból veszi be.jusukekamiyamane
Egy i ikon intostadja is visszatérhet a színhez, e.g. Qtgui.Qcolor (‘zöld’), amelyet szilárd négyzetként húznak.
Az alkalmazás futtatásához most már képesnek kell lennie az elemek teljes jelölésére.
A TODOS teljes jelöléssel rendelkezik
Egy tartós adattár
A TODO alkalmazásunk szépen működik, de van egy végzetes hibája-elfelejti a todóit, amint bezárja az alkalmazást, miközben azt gondolja, hogy nincs mit tenni, ha hozzájárulhat a Zen rövid távú érzéseihez, ez valószínűleg a valószínűleg a rossz ötlet.
A megoldás az, hogy megvalósítsuk a Parsist Data Store néhány kirándulását. A legegyszerűbb megközelítés egy egyszerű fájláru, ahol az elemeket a JSON vagy a savanyúság fájlból töltjük be, és visszaírjuk a változásra.
Ehhez két új módszert határozunk meg a kezünkön . Ezek a betöltési adatokat JSON fájlnév -adatokból adják.JSON (ha létezik, akkor hagyja figyelmen kívül a hibát, ha nem) önmagához.modell.Todos és írja meg az aktuális önmagát.modell.Todos ugyanazon a fájlhoz.
DEF betöltés (self): Próbálja ki: nyitott ('adatok.json ',' r ') mint f: én.modell.Todos = json.Betöltés (f) Kivétel Kivétel: Pass Def Save (self): Nyílt ('adatok.json ',' w ') mint f: data = json.Dump (önmag.modell.Todos, f)
Ahhoz, hogy fennmaradjon az adatok változásait, amelyeket hozzá kell adnunk a .Mentse () kezelőt minden olyan módszer végéig, amely módosítja az adatokat, és a .Betöltés () kezelő az __init__ blokkhoz a modell létrehozása után.
A végső kód így néz ki –
Import Sys Import JSON -ból a PYQT5 Import Qtcore, QTGUI, QTWIDGETS, UIC a PYQT5 -ből.Qtcore Import qt_creator_file = "mainwindow.ui "ui_mainwindow, qtBaseclass = uic.LoadUduseype (qt_creator_file) tick = qtgui.Qimage ('Jelölje be.Png ') osztály ToDomodel (qtcore.QabstractListModel): def __init __ (self, *args, todos = nincs, ** kwargs): szuper (toDomodel, self).__init __ (*args, ** kwargs) én.todos = todos vagy [] def data (self, index, szerep): ha szerepe == qt.Displayrole: _, text = self.Todos [index.Sor ()] visszaadási szöveget, ha szerepe == qt.Decorationrole: status, _ = én.Todos [index.ROW ()] Ha állapot: Visszatérés Jog Def RowCount (self, Index): Visszatérés len (self.Todos) osztály MainWindow (qtwidgets.QMainWindow, UI_MainWindow): def __init __ (self): szuper (mainwindow, self).__Magában.Setupui (self) én.Model = tomodel () én.Betöltés () én.todview.SetModel (én.Modell) én.addbutton.nyomja meg.Csatlakoztasson (én.Add) én.DeleteButton.nyomja meg.Csatlakoztasson (én.Törölje) én.Komplettgutton.nyomja meg.Csatlakoztasson (én.Teljes) Def Add (self): "" "Adjon hozzá egy elemet a TODO listájához, a szöveget a QLineEdit -ről .Todoedit és ott tisztázva. "" "szöveg = én.todrus.Text (), ha szöveg: # Ne adjon hozzá üres karakterláncokat. # Hozzáférhet a listához a modell segítségével. maga.modell.todosz.Függelék ((hamis, szöveg)) # trigger frissítés. maga.modell.elrendezett.Bocsátja ki () # ürítse ki a bemeneti önmagát.todrus.SetText ("") én.Mentés () def delete (self): indexek = self.todview.selectedDindexes (), ha indexek: # indexek az egyetlen elem listája az egyválasztásban. Index = index [0] # Távolítsa el az elemet és frissítse. Del self.modell.Todos [index.Sor ()] én.modell.elrendezett.Bocsátás () # törölje a választást (mivel ez nem régóta érvényes). maga.todview.ClarSelection () önmagában.Save () def teljes (self): indexek = self.todview.SelectRedIndexes (), ha indexek: index = index [0] sor = index.Sor () status, text = én.modell.Todos [sor] önmaga.modell.Todos [sor] = (igaz, szöveg) # .A DataChanged a bal felső és a jobb alsó és a jobb alsó részét veszi figyelembe, amelyek egyenlőek # egyetlen választáshoz. maga.modell.datachanged.Kibocsátás (index, index) # törölje a kiválasztást (mivel ez nem régóta érvényes). maga.todview.ClarSelection () önmagában.Save () def betöltés (self): Próbálja ki: nyitott ('adatok.db ',' r ') mint f: én.modell.Todos = json.Betöltés (f) Kivétel Kivétel: Pass Def Save (self): Nyílt ('adatok.db ',' w ') mint f: data = json.Dump (önmag.modell.todos, f) app = qtwidgets.QApplication (SYS.Argv) ablak = mainwindow () ablak.Show () alkalmazás.Exec_ ()
Ha az alkalmazásban szereplő adatok nagy vagy bonyolultabbá válhatnak, akkor előfordulhat, hogy egy tényleges adatbázist használ a tárolására. Ebben az esetben a modell az interfészt az adatbázisba csomagolja, és közvetlenül az adatok megjelenítéséhez lekérdezi. A L’LL borítja, hogyan kell ezt megtenni egy közelgő oktatóanyagban.
A QlistView másik érdekes példájához lásd ezt a példa médialejátszó alkalmazást. A QMediPlayList QT épületet használja adattárként, a tartalom megjelenése a QlistView -ra jelenik meg .
A BCR -ről.CX:
BCR.A CX egy brazil technológiai induló vállalkozás, amely mind az üzleti kiszervezési folyamatokra (BPO), mind az üzleti környezet kiszervezésére (BEO) szakosodott, elsősorban a kereslet generálására, az ügyfelek tapasztalataira, a kommunikációra, a felhasználói támogatásra és az elégedettségre összpontosítva.
Leírás:
A TODO alkalmazást gyors, biztonságos és felhasználóbarát módszerként fejlesztették ki az ügynök jegyzeteinek tárolására a munkanapon belül.
Képes legyen saját feladatainak létrehozására és kezelésére, az egyes jegyek vagy ügyfél alapján.
Hozzon létre nyomvonalakat, és testreszabja a munkafolyamatot
A termelékenység javítása! A TODO alkalmazás használata testreszabott munkafolyamatokat hozhat létre az említések szabványosításához. Próbálja ki most, és kezdje el ellenőrizni az előrehaladást, mint a todóit és az adományokat.
Erőforrások:
- Hozzon létre feladatokat minden jegyhez
- Progress Bar a Wathable nyomon követéséhez
- Hozzon létre szabványosított munkafolyamatokat a termelékenység fokozása érdekében.
- Kezelje a feladatlistáját annak érdekében, hogy megőrizze a napi rutinját.
- Csomagolja mind a Todo, mind a Zendesk Sunshine -t, hogy teljes hozzáférést kapjon az alkalmazás funkcióival szemben
- Javítsa a termelékenységet a feladatok automatizálásának létrehozásával vagy szerkesztésével, és mentse el személyre szabott presultjait.