Todo di Mac App Store, menggunakan seni bina ModelView Pyqt5 untuk membina aplikasi Todo yang mudah
ModelView Architecture Qt S MVC antara muka untuk memaparkan data dalam pandangan
Contents
- 1 ModelView Architecture Qt S MVC antara muka untuk memaparkan data dalam pandangan
Aplikasi berjalan ditunjukkan di bawah.
Todo 4+
Selama bertahun -tahun saya menggunakan aplikasi ini di iPad saya, iPhone dan MacBookPro saya. Sekiranya ia terus berfungsi dengan sempurna di iOS, nampaknya ia tidak sepenuhnya mengikuti evolusi macOS.
Tiada masalah memasangnya. Tetapi tidak lagi mungkin untuk menyegerakkan dengan toodledo pada macOS, sementara ia terus mungkin pada iOS: pengenal yang sama tidak diiktiraf.
Oleh itu, ia tidak perlu bagi saya … dan bantuan Appigo nampaknya tidak tergesa -gesa untuk memberi jawapan kepada permintaan saya. Selalu tidak menyenangkan untuk diperhatikan bahawa konsep pelanggan kehilangan sedikit lebih banyak nilainya setiap hari.
Pisa d
Oleh kerana kemas kini ini saya telah kehilangan semua senarai saya dalam jumlah 12 dan yang saya bekerja setiap hari dengan cara yang profesional. Saya menguruskan kira -kira 200 tempat secara kekal, kemas kini ini telah diletakkan pada bulan -bulan yang menyedihkan ! Semua tugas yang dianjurkan dalam senarai mendapati diri mereka dikelompokkan dalam satu senarai global. Pastinya bukan pepijat ini yang akan membuat saya lulus ke versi yang mengatakan profesional perisian ini sebaliknya sangat baik. Saya tidak akan menjadi tawanan. Hanya untuk saya menunggu tindak balas sokongan yang dihubungi malam ini melalui e -mel atau kemudian cari versi lama perisian yang luar biasa ini. Saya sangat berharap bahawa ia adalah beug muda versi baru dan bukan strategi untuk memaksa untuk berhijrah ke versi pro berbayar untuk mencari fungsi yang telah diperoleh dengan versi sebelumnya. Untuk maklumat penyegerakan saya dilakukan dengan dropbox
SurlePoint, 12/13/2011
Synchro kini nikel
Saya meraih sebelum penyegerakan yang perlahan, berjalan dengan teruk, dll. Tetapi sekarang dengan iCloud, ia sesuai dengan saya.
Beberapa penambahbaikan yang mungkin: lebih banyak tetapan paparan.
– untuk memaparkan hanya apa yang pengguna gunakan. Contohnya saya tidak menggunakan konteks atau label (dalam apa jua keadaan belum) dan saya tidak mahu lagi memaparkan pilihan ini yang “mencemarkan” todo saya. Saya hanya ingin mempunyai “tarikh / keutamaan / senarai / jenis” untuk nota harian saya dan klik kanan untuk pilihan yang jarang saya gunakan
– Dan sebaliknya saya ingin paparan PLSU mudah daripada menu drop -down untuk memilih tarikh, keutamaan, senarai, … jika saya hanya mempunyai tiga senarai, maka tiga butang akan cukup untuk dipaparkan, dan saya boleh memilih senarai saya dengan satu klik dan bukannya mengklik pada menu drop -down, cari nama, dan klik padanya. (Ditto untuk keutamaan, terutamanya kita pergi dari lukisan yang sangat visual pada senarai todo kepada pilihan nama dalam pilihan yang tidak begitu semula jadi.
Ini adalah perincian ergonomik. Saya suka kesederhanaan dan kecekapan todo, jadi saya ingin bahawa ia boleh menjadi lebih dikonfigurasikan untuk menjadi lebih mudah.
Aplikasi Privasi
Pemaju, Appigo, tidak memberikan butiran mengenai amalan peribadi dan pengendalian data ke Apple. Untuk maklumat lanjut, lihat Dasar Privasi Pembangunan.
Senibina ModelView
Antara muka seperti MVC QT untuk memaparkan data dalam pandangan
Semasa anda mula membina aplikasi yang lebih kompleks dengan pyqt5, anda mungkin akan menjumpai menyimpan widget selaras dengan data anda. Data yang disimpan dalam widget (e.g. qlistwidget yang mudah) tidak tersedia untuk dimanipulasi dari python – perubahan memerlukan anda mendapatkan item, dapatkan data, dan kemudian menetapkannya kembali. Penyelesaian lalai untuk ini adalah untuk menyimpan perwakilan data luaran di Python, dan kemudian eith duplikat kemas kini ke kedua -dua data dan widget, atau hanya menulis semula widget wihole dari data. Ini boleh menjadi hodoh dengan cepat, dan menghasilkan banyak boilerplate hanya untuk mengutamakan data.
Syukurlah QT mempunyai penyelesaian untuk ini – ModelViews. ModelViews adalah alternatif yang kuat untuk widget paparan standard, yang menggunakan antara muka model biasa untuk berinteraksi dengan sumber data – dari struktur data mudah ke pangkalan data luaran. Ini mengasingkan data anda, yang membolehkannya disimpan dalam struktur yang anda suka, sementara pandangan menjaga persembahan dan kemas kini.
Tutorial ini memperkenalkan aspek utama seni bina model qt dan menggunakannya untuk membina aplikasi desktop mudah di pyqt5.
Model View Controller
Model – Lihat – pengawal (MVC) adalah penggunaan corak seni bina untuk antara muka pengguna pembangunan yang membahagikan aplikasi menjadi tiga bahagian yang saling berkaitan. Ini memisahkan perwakilan dalaman data dari bagaimana maklumat dikemukakan kepada dan menerima dari pengguna.
Reka bentuk MVC Pattenn FET Tiga komponen utama –
- Model Memegang struktur data yang berfungsi dengan aplikasi.
- Lihat Adakah perwakilan maklumat seperti yang ditunjukkan kepada pengguna, di mana grafik atau jadual. Pelbagai pandangan model data yang sama dibenarkan.
- Kawalan Menerima input dari pengguna, mengubahnya menjadi arahan untuk model atau pandangan.
Ia mendarat perbezaan antara pandangan & pengawal mendapat sedikit keruh. QT menerima peristiwa input dari pengguna (melalui OS) dan mewakilkannya kepada widget (pengawal) untuk mengendalikan. Walau bagaimanapun, widget juga mengendalikan persembahan keadaan semasa kepada pengguna, meletakkannya tepat dalam pandangan. Daripada menyamar di mana untuk melukis garis, dalam QT-s-speak pandangan dan pengawal ILEAD bergabung dengan Model/ViewController Architecture-C -nish “Model View” untuk kesederhanaan.
Yang penting, perbezaan antara data dan Bagaimana ia dibentangkan dipelihara.
Pandangan model
Model bertindak sebagai antara muka antara kedai data dan viewController. Model ini memegang data (atau merujuk kepadanya) dan membentangkan data ini melalui API yang standard yang dilihat kemudian dimakan dan dibentangkan kepada pengguna. Pelbagai pandangan dapat berkongsi data yang sama, membentangkannya dengan cara yang sama sekali berbeza.
Anda boleh menggunakan mana -mana “kedai data” untuk model anda, termasuk contoh senarai python standard atau kamus, atau pangkalan data (melalui e.g. Sqlalchemy) – ia sesuai dengan anda.
Kedua -dua bahagian pada dasarnya bertanggungjawab –
- Teh model Menyimpan data, atau merujuknya dan mengembalikan individu atau julat rekod, dan metadata yang berkaitan atau paparan arahan.
- Teh Lihat Meminta data dari model dan memaparkan apa yang dikembalikan pada widget.
Terdapat perbincangan mendalam mengenai seni bina QT dalam dokumentasi.
Panduan Lengkap untuk Pembungkusan Aplikasi GUI Python dengan Pyinstaller.
[[diskaun.Discount_pc]]]% off untuk [diskaun seterusnya.tempoh]] [Diskaun.Penerangan]] dengan kod [diskaun.Kod Kupon]]
Membeli pariti kuasa
Pemaju di [[negara]] mendapatkan [[diskaun.discount_pc]] di semua buku & kursus dengan kod [diskaun.Kod Kupon]]
Pandangan Model Mudah – Senarai Todo
Untuk menunjukkan cara menggunakan modelViews dalam amalan, kami akan mengumpulkan pelaksanaan senarai todo desktop yang sangat mudah. Ini terdiri daripada QListView untuk senarai item, qlineEdit untuk memasukkan item baru, dan satu set butang untuk menambah, memadam, atau menandakan item seperti yang dilakukan.
UI
UI yang mudah adalah pencipta QT yang hodoh dan disimpan sebagai mainwindow.ui . Teh .Fail UI dan semua bahagian lain boleh dimuat turun di bawah.
Merancang Aplikasi Todo Mudah di Pencipta QT
Aplikasi berjalan ditunjukkan di bawah.
Todo Gui yang berlari (belum ada yang berfungsi)
Widget yang terdapat di antara muka kami diberikan ID yang ditunjukkan dalam jadual di bawah.
Objeuch | Jenis | Penerangan |
---|---|---|
Todview | Qlistview | Senarai todo semasa |
tododit | QlineEdit | Input teks untuk membuat item todo baru |
AddButton | Qpushbutton | Buat todo baru, menambahkannya ke senarai todos |
DeleteButton | Qpushbutton | Padam Todo yang dipilih semasa, mengeluarkannya dari senarai Todos |
LengkapButton | Qpushbutton | Tandakan todo yang dipilih semasa seperti yang dilakukan |
Kami akan menggunakan pengenal ini untuk menyambungkan logik aplikasi kemudian.
Model
Kami mentakrifkan model tersuai kami dengan subclassing dari pelaksanaan, yang membolehkan kami memberi tumpuan kepada bahagian -bahagian yang unik untuk model kami. QT membekalkan beberapa pangkalan model yang berbeza, termasuk senarai, pokok dan meja (sesuai untuk spreadsheet).
Untuk contoh ini, kami memaparkan hasilnya kepada QListView . Model asas yang sepadan untuk ini adalah qabstractlistmodel . Takrif garis besar untuk model kami ditunjukkan di bawah.
TODOMODEL KELAS (qtcore.QabstractListModel): def __init __ (diri, *args, todos = none, ** kwargs): super (todomodel, diri).__init __ (*args, ** kwargs) diri.todos = todos atau [] def data (diri, indeks, peranan): jika peranan == qt.DisplayRole: # Lihat di bawah untuk struktur data. status, teks = diri.Todos [indeks.Baris ()] # mengembalikan teks todo sahaja. Kembali teks def rowcount (diri, indeks): kembali len (diri.tod)
Teh .Pembolehubah Todos adalah kedai data kami dan dua kaedah rowcount () dan data () adalah kaedah model standard yang mesti kita buat untuk model senarai. Kami akan meneruskannya di bawah.
.Senarai Todos
Kedai data untuk model kami adalah .Todos, senarai python mudah di mana kami akan menyimpan nilai tuple dalam format [(bool, str), (bool, str), (bool, str)] di mana bool adalah Oleh itu keadaan entri yang diberikan, dan str adalah teks todo.
Kami memulakan diri.Todo ke senarai kosong pada permulaan, melainkan senarai dilalui melalui argumen kata kunci todos.
diri.todos = todos atau [] akan menetapkan diri.Todos dengan nilai todos yang disediakan sekiranya ia berlaku Truty (i.e. Apa -apa selain senarai kosong, boolean palsu atau tidak nilai lalai), jika tidak, ia akan ditetapkan ke senarai kosong [] .
Untuk mencipta insance model ini kita boleh mudah –
Model = TODOMODEL () # Buat Senarai Todo Kosong
Atau lulus dalam senarai yang ada –
todos = [(palsu, 'item'), (palsu, 'item lain')] Model = TODOMODEL (Todos)
.ROWCOUNT ()
Teh .Kaedah RowCount () adalah callade oleh pandangan untuk mendapatkan bilangan baris dalam data semasa. Ini diperlukan untuk tujuan sekarang indeks maksimum ia dapat mengulangi kedai data (baris kiraan-1). Jualan Kami menggunakan senarai python sebagai kedai data kami, nilai pulangan untuk ini hanyalah len () senarai.
.Data ()
Ini adalah teras model anda, yang mengendalikan permintaan data dari pandangan dan mengembalikan hasil yang sesuai. Ia menerima dua indeks parameter dan peranan.
Indeks adalah kedudukan/koordinat data yang diminta oleh pandangan, boleh diakses oleh dua kaedah .Baris () dan .lajur () yang memberikan kedudukan dalam setiap dimensi.
Untuk QListView kami lajur selalu 0 dan boleh diabaikan, tetapi anda perlu menggunakan ini untuk data 2D dalam paparan spreadsheet.
Peranan adalah bendera yang menunjukkan jenis data yang diminta oleh pandangan. Ini kerana .Kaedah () kaedah sebenarnya mempunyai lebih banyak tanggungjawab daripada hanya data teras. Ia juga mengendalikan permintaan untuk maklumat gaya, petua, bar status, dll. – Basalely apa -apa yang dapat dimaklumkan oleh data itu sendiri.
Penamaan QT.DisplayRole agak pelik, tetapi ini menunjukkan bahawa Lihat Adakah meminta kami “Tolong beri saya data untuk paparan”. Ada yang lain peranan Data yang boleh diterima untuk permintaan gaya atau meminta data dalam format “edit-siap”.
Peranan | Nilai | Penerangan |
---|---|---|
Qt.Paparan | 0 | Data utama yang akan dibentuk dalam bentuk teks. (Qstring) |
Qt.DecorationRole | 1 | Data yang akan diberikan sebagai hiasan dalam bentuk ikon. (QColor, Qicon atau QpixMap) |
Qt.Editorial | 2 | Data dalam ikut formal untuk mengedit dalam editor. (Qstring) |
Qt.Tooltiprole | 3 | Data yang dipaparkan dalam tooltip item. (Qstring) |
Qt.Statustiprole | 4 | Data yang dipaparkan di bar status. (Qstring) |
Qt.Whatshisrole | 5 | Data yang dipaparkan untuk item tersebut dalam “Apa ini?”Fesyen. (Qstring) |
Qt.SIVEHINTROLE | 13 | Petunjuk saiz untuk item yang akan dibekalkan kepada pandangan. (Qsize) |
Untuk senarai penuh tersedia peranan bahawa anda boleh menerima melihat dokumentasi qt itmdatarole. Senarai Todo kami hanya akan menggunakan QT.DisplayRole dan Qt.DecorationRole .
Pelaksanaan asas
Berikut adalah aplikasi stub asas yang diperlukan untuk memuatkan UI dan memaparkannya. Kami akan menambah kod model dan logik aplikasi kami ke pangkalan ini.
Import Sys dari Import Pyqt5 Qtcore, Qtgui, Qtwidgets, UIC dari Pyqt5.Qtcore import qt_creator_file = "mainwindow.ui "ui_mainwindow, qtbaseclass = uic.Loaduduype (qt_creator_file) kelas tocomodel (qtcore.QabstractListModel): def __init __ (diri, *args, todos = none, ** kwargs): super (todomodel, diri).__init __ (*args, ** kwargs) diri.todos = todos atau [] def data (diri, indeks, peranan): jika peranan == qt.DisplayRole: status, teks = diri.Todos [indeks.Baris ()] kembali teks def rowcount (diri, indeks): kembali len (diri.Todos) mainWindow kelas (qtwidgets.Qmainwindow, ui_mainwindow): def __init __ (diri): qtwidgets.QumainWindow.__init __ (diri) ui_mainwindow.__init __ (diri) diri.Setupui (diri) diri.Model = TODOMODEL () diri.Todview.SetModel (diri.Model) app = qtwidgets.Qapplication (sys.Argv) tetingkap = mainWindow () tetingkap.Menunjukkan () aplikasi.Exec_ ()
Kami mentakrifkan odomodel kami seperti dahulu, dan memulakan objek mainwindow. Di __init__ untuk mainwindow kami membuat contoh model todo kami dan menetapkan model ini pada todo_view . Simpan fail ini sebagai todo.Py dan jalankan dengan –
python3 todo.laju
Walaupun belum banyak yang dapat dilihat, QListView dan model kami sebenarnya berfungsi – jika anda menambah beberapa data lalai, anda akan melihatnya muncul dalam senarai.
diri.model = TODOMODEL (todos = [(palsu, 'todo pertama saya'))))))
QListView menunjukkan item todo berkod keras
Anda boleh terus menambah item secara manual seperti ini dan mereka akan muncul dalam rangka dalam qlistview . Seterusnya kami akan memungkinkan untuk menambahkan ITM dari dalam permohonan.
Pertama buat kaedah baru pada MainWindow bernama Tambah . Ini adalah panggilan balik kami yang akan menjaga menambah teks semasa dari input sebagai todo baru. Sambungkan kaedah ini ke AddButton.Isyarat ditekan pada akhir blok __init__.
Kelas MainWindow (qtwidgets.Qmainwindow, ui_mainwindow): def __init __ (diri): qtwidgets.QumainWindow.__init __ (diri) ui_mainwindow.__init __ (diri) diri.Setupui (diri) diri.Model = TODOMODEL () diri.Todview.SetModel (diri.Model) # Sambungkan butang. diri.AddButton.tekan.Sambung (Diri.Tambah) def tambah (diri): "" Tambahkan item ke senarai todo kami, dapatkan teks dari qlineEdit .Todoedit dan di sana membersihkannya. "" "teks = diri.tododit.Teks () jika teks: # jangan tambahkan tali kosong. # Akses senarai melalui model. diri.model.Todos.Tambah ((palsu, teks)) # mencetuskan penyegaran. diri.model.LayoutChanged.Memancarkan () # kosongkan input diri.tododit.Settext ("")
Di dalam blok tambah notis garis diri.model.LayoutChanged.Memancarkan () . Di sini kita memancarkan isyarat model .LayoutChanged untuk membiarkan pandangan mengetahui bahawa bentuk data telah diubah. Ini mencetuskan penyegaran entiti pandangan. Sekiranya anda menghilangkan baris ini, todo masih akan ditambah tetapi qlistview tidak akan dikemas kini.
Sekiranya data hanya diubah, tetapi bilangan baris/lajur tidak terjejas, anda boleh menggunakan .Isyarat () isyarat () sebaliknya. Ini juga mentakrifkan rantau yang diubah dalam data menggunakan sewa atas kiri dan bawah kanan untuk mengelakkan menyusun semula pandangan keseluruhan pandangan.
Menghubungkan tindakan lain
Sekarang kita boleh menyambungkan sisa isyarat butang dan menambah fungsi bantuan untuk prestasi Padam dan lengkap Operasi. Kami menambah isyarat butang ke blok __init__ seperti sebelumnya.
diri.AddButton.tekan.Sambung (Diri.Tambah) diri.DeleteButton.tekan.Sambung (Diri.Padam) diri.LengkapButton.tekan.Sambung (Diri.Lengkap)
Kemudian tentukan kaedah padam baru seperti berikut –
Def delete (diri): indeks = diri.Todview.SelectedDIndexes () Jika indeks: # indeks adalah senarai item tunggal dalam pilihan tunggal. Indeks = indeks [0] # Keluarkan item dan menyegarkan. Del diri.model.Todos [indeks.Baris ()] diri.model.LayoutChanged.Memancarkan () # membersihkan pemilihan (kerana tidak lama lagi). diri.Todview.ClarSelection ()
Kami menggunakan diri.Todview.terpilihDIndexes untuk mendapatkan indeks (sebenarnya senarai satu item, seperti yang kita dalam mod pemilihan tunggal) dan kemudian .Baris () sebagai indeks ke dalam senarai todos kami pada model kami. Kami memadam item yang diindeks menggunakan pengendali del python, dan kemudian mencetuskan isyarat layoutchanged kerana bentuk data telah diubah suai.
Secara halus, kami membersihkan pemilihan aktif sejak item yang berkaitan dengan mungkin sekarang di luar batas (jika anda telah memilih item terakhir).
Anda boleh cuba menjadikan Smartter ini, dan pilih item terakhir dalam senarai
Kaedah lengkap suka seperti ini –
Def lengkap (diri): indeks = diri.Todview.selectRedIndexes () jika indeks: indeks = indeks [0] baris = indeks.Baris () status, teks = diri.model.Todos [baris] diri.model.Todos [baris] = (benar, teks) # .DataChanged mengambil bahagian atas kiri dan bawah, yang sama # untuk satu pilihan. diri.model.DataChanged.Emit (Indeks, Indeks) # Kosongkan Pemilihan (kerana ia tidak lama sah). diri.Todview.ClarSelection ()
Ini menggunakan pengindeksan yang sama seperti untuk memadam, tetapi kali ini kita mengambil item dari model .Senarai Todos dan kemudian ganti status dengan Benar .
Kita harus melakukan pengambilan dan penggantian ini, kerana data kami disimpan sebagai tupling python yang tidak dapat diubah suai.
Kunci berbeza di sini vs. Widget QT Standard ialah kami membuat perubahan terus ke data kami, dan mudah perlu memberitahu QT bahawa mengubah Haasurd – mengemas kini keadaan widget ditangani secara automatik.
Menggunakan Qt.DecorationRole
Sekiranya anda menjalankan aplikasi sekarang, anda harus mendapati bahawa menambah dan memadam kedua -dua kerja, tetapi semasa menyelesaikan item berfungsi, tidak ada petunjuk mengenainya. Kami perlu mengemas kini model kami untuk memberikan pandangan dengan penunjuk untuk dipaparkan apabila item selesai. Model yang dikemas kini ditunjukkan di bawah.
Tick = qtgui.Qimage ('tandakan.png ') kelas tocomodel (qtcore.QabstractListModel): def __init __ (diri, *args, todos = none, ** kwargs): super (todomodel, diri).__init __ (*args, ** kwargs) diri.todos = todos atau [] def data (diri, indeks, peranan): jika peranan == qt.DisplayRole: _, teks = diri.Todos [indeks.Baris ()] kembali teks jika peranan == qt.DecorationRole: Status, _ = Diri.Todos [indeks.Baris ()] jika status: kembali tick def rowcount (diri, indeks): kembali len (diri.tod)
Menggunakan tanda ikon tanda.Png untuk menunjukkan item lengkap, yang kami muatkan ke dalam objek qimage bernama tanda . Dalam model kami menyampaikan pengendali untuk QT.DecorationRole yang mengembalikan ikon semak untuk baris yang status adalah benar (untuk lengkap).
Ikon yang saya gunakan diambil dari fugue yang ditetapkan oleh p.Yusukekamiyamane
Intostad ikon I Anda juga boleh kembali ke warna, e.g. Qtgui.Qcolor (‘hijau’) yang akan ditarik sebagai persegi padat.
Menjalankan aplikasinya sekarang anda harus dapat menandakan item sebagai lengkap.
Todos ditandakan lengkap
Kedai data berterusan
Aplikasi Todo kami berfungsi dengan baik, tetapi ia mempunyai satu kecacatan yang membawa maut-ia melupakan todos anda sebaik sahaja anda menutup permohonan itu sambil berfikir anda tidak ada kena mengena apabila anda boleh menyumbang kepada perasaan jangka pendek Zen, jangka panjang itu mungkin mungkin idea buruk.
Penyelesaiannya adalah untuk melaksanakan beberapa kedai data berterusan. Pendekatan yang paling mudah adalah kedai fail mudah, di mana kami memuatkan item dari fail JSON atau Pickle pada permulaan, dan tulis semula pada perubahan.
Untuk melakukan ini, kami menentukan dua kaedah baru di tangan kami . Data beban ini dari data nama fail JSON.Json (jika ada, mengabaikan ralat jika tidak) kepada diri sendiri.model.Todo dan tulis diri semasa.model.Todos ke fail yang sama, masing -masing.
Load def (diri): Cuba: dengan buka ('data.json ',' r ') sebagai f: diri.model.Todos = JSON.Beban (f) Pengecualian Pengecualian: Lulus Def Save (Self): Dengan Terbuka ('Data.json ',' w ') sebagai f: data = json.Dump (diri.model.Todos, f)
Untuk meneruskan perubahan pada data yang kita perlukan untuk menambahkan .Simpan () pengendali ke akhir kaedah yang mengubah data, dan .Memuatkan () pengendali ke blok __init__ selepas model telah mencipta.
Kod akhir kelihatan seperti ini –
Import Sys Import JSON dari PYQT5 Import Qtcore, Qtgui, Qtwidgets, UIC dari PYQT5.Qtcore import qt_creator_file = "mainwindow.ui "ui_mainwindow, qtbaseclass = uic.LOADUDUSEPE (qt_creator_file) Tick = qtgui.Qimage ('tandakan.png ') kelas tocomodel (qtcore.QabstractListModel): def __init __ (diri, *args, todos = none, ** kwargs): super (todomodel, diri).__init __ (*args, ** kwargs) diri.todos = todos atau [] def data (diri, indeks, peranan): jika peranan == qt.DisplayRole: _, teks = diri.Todos [indeks.Baris ()] kembali teks jika peranan == qt.DecorationRole: Status, _ = Diri.Todos [indeks.Baris ()] jika status: kembali tick def rowcount (diri, indeks): kembali len (diri.Todos) mainWindow kelas (qtwidgets.Qmainwindow, ui_mainwindow): def __init __ (diri): super (mainwindow, diri).__Init __ () diri.Setupui (diri) diri.Model = TODOMODEL () diri.Memuatkan () diri.Todview.SetModel (diri.Model) diri.AddButton.tekan.Sambung (Diri.Tambah) diri.DeleteButton.tekan.Sambung (Diri.Padam) diri.LengkapButton.tekan.Sambung (Diri.Lengkap) def tambah (diri): "" "Tambahkan item ke senarai todo kami, dapatkan teks dari qlineEdit .Todoedit dan di sana membersihkannya. "" "teks = diri.tododit.Teks () jika teks: # jangan tambahkan tali kosong. # Akses senarai melalui model. diri.model.Todos.Tambah ((palsu, teks)) # mencetuskan penyegaran. diri.model.LayoutChanged.Memancarkan () # kosongkan input diri.tododit.Settext ("") diri.Simpan () def delete (diri): indeks = diri.Todview.SelectedDIndexes () Jika indeks: # indeks adalah senarai item tunggal dalam pilihan tunggal. Indeks = indeks [0] # Keluarkan item dan menyegarkan. Del diri.model.Todos [indeks.Baris ()] diri.model.LayoutChanged.Memancarkan () # membersihkan pemilihan (kerana tidak lama lagi). diri.Todview.ClarSelection () diri.Simpan () def lengkap (diri): indeks = diri.Todview.selectRedIndexes () jika indeks: indeks = indeks [0] baris = indeks.Baris () status, teks = diri.model.Todos [baris] diri.model.Todos [baris] = (benar, teks) # .DataChanged mengambil bahagian atas kiri dan bawah, yang sama # untuk satu pilihan. diri.model.DataChanged.Emit (Indeks, Indeks) # Kosongkan Pemilihan (kerana ia tidak lama sah). diri.Todview.ClarSelection () diri.Simpan () def beban (diri): cuba: dengan buka ('data.db ',' r ') sebagai f: diri.model.Todos = JSON.Beban (f) Pengecualian Pengecualian: Lulus Def Save (Self): Dengan Terbuka ('Data.db ',' w ') sebagai f: data = json.Dump (diri.model.todos, f) App = qtwidgets.Qapplication (sys.Argv) tetingkap = mainWindow () tetingkap.Menunjukkan () aplikasi.Exec_ ()
Sekiranya data dalam aplikasi anda berpotensi untuk mendapatkan besar atau lebih kompleks, anda boleh menggunakan pangkalan data sebenar untuk menyimpannya. Dalam kes ini model akan membungkus antara muka ke pangkalan data dan menanyakannya secara langsung untuk memaparkan data. L’ll meliputi cara melakukan ini dalam tutorial yang akan datang.
Untuk contoh lain yang menarik dari QListView, lihat contoh aplikasi pemain media ini. Ia menggunakan QMediaPlayList bangunan QT sebagai datastore, dengan kandungan paparan ke QListView .
Mengenai BCR.CX:
Bcr.CX adalah permulaan teknologi Brazil, khusus dalam kedua -dua proses penyumberan luar perniagaan (BPO) dan penyumberan luar persekitaran perniagaan (BEO), terutamanya memberi tumpuan kepada penjanaan permintaan, pengalaman pelanggan, komunikasi, sokongan pengguna dan kepuasan.
Penerangan:
Aplikasi Todo dibangunkan sebagai cara yang cepat, selamat, dan mesra pengguna untuk menyimpan nota ejen semasa hari kerja.
Dapat membuat dan menguruskan tugas anda sendiri, berdasarkan setiap tiket atau pelanggan individu.
Buat laluan dan sesuaikan aliran kerja anda
Produktiviti meningkatkan! Menggunakan App Todo Anda boleh membuat aliran kerja yang disesuaikan untuk menyeragamkan proses berulang. Cuba sekarang dan mulailah mengawal kemajuan anda, seperti tod dan donat anda.
Sumber:
- Buat tugas untuk setiap tiket
- Bar kemajuan untuk disusuli boleh disampaikan
- Buat aliran kerja standard untuk meningkatkan produktiviti.
- Urus senarai tugas anda, untuk mengekalkannya dengan rutin harian anda.
- Tumpukan kedua -dua Sunshine Todo dan Zendesk untuk mendapatkan akses penuh melalui ciri aplikasi
- Meningkatkan produktiviti dengan membuat atau mengedit tugas automasi, dan simpan pratetap peribadi anda.