TODO در فروشگاه App Mac ، با استفاده از معماری PYQT5 ModelView برای ساختن یک برنامه ساده Todo

رابط ModelView Architecture Qt S MVC برای نمایش داده ها در نماها

برنامه در حال اجرا در زیر نشان داده شده است.

TODO 4+

برای چندین سال از این برنامه در iPad ، iPhone و MacBookPro خود استفاده کردم. اگر این کار کاملاً روی iOS کار کند ، به نظر می رسد که به طور کامل از تکامل MACOS پیروی نکرده است.
در نصب آن مشکلی ندارید. اما دیگر همگام سازی با Toodledo در MACOS امکان پذیر نیست ، در حالی که همچنان در iOS امکان پذیر است: همان شناسه ها تشخیص داده نمی شوند.
بنابراین برای من غیر ضروری می شود … و به نظر نمی رسد که کمک Appigo برای ارائه پاسخی به درخواست من عجله داشته باشد. همیشه جالب است که توجه داشته باشید که مفهوم مشتری هر روز کمی بیشتر از ارزش خود را از دست می دهد.

پیزا د

از این به روزرسانی ، من تمام لیست هایم را در تعداد 12 از دست داده ام و روزانه با آن کار می کنم. من تقریباً 200 نقطه را به طور دائم مدیریت می کنم ، این بروزرسانی ماههای مصیبت را در زمین مصیبت قرار داده است ! تمام کارهایی که در لیست برگزار شده است ، خود را در یک لیست جهانی گروه بندی کردند. مطمئناً این اشکال نیست که باعث می شود من به نسخه ای بگویم که حرفه ای این نرم افزار را می گویم در غیر این صورت بسیار عالی است. من هرگز اسیر نخواهم شد. این فقط برای من باقی مانده است که منتظر پاسخ پشتیبانی امروز از طریق ایمیل باشم یا سپس نسخه قدیمی این نرم افزار باشکوه را پیدا کنم. من واقعاً امیدوارم که این یک جوان جوان از نسخه جدید باشد و نه یک استراتژی برای مهاجرت به نسخه PAY PRO برای یافتن ویژگی هایی که قبلاً با نسخه قبلی به دست آمده است. برای اطلاعات همگام سازی من با Dropbox انجام می شود

Surlepoint ، 12/13/2011

همگام اکنون نیکل است

من قبل از هماهنگ سازی که کند بود ، به شدت راه می رفتم و غیره. اما اکنون با iCloud ، کاملاً مناسب من است.

برخی از پیشرفت های احتمالی: تنظیمات نمایش بیشتر.
– برای نمایش فقط آنچه کاربر استفاده می کند. به عنوان مثال ، من از زمینه ها یا برچسب ها استفاده نمی کنم (در هر صورت هنوز) و نمی خواهم دیگر این گزینه ها را که “TODO من” را “آلودگی” نمی کند ، نمایش ندهم. من می خواهم فقط برای یادداشت های روزمره خود فقط “تاریخ / اولویت / لیست / نوع” داشته باشم و برای گزینه هایی که بندرت استفاده می کنم ، کلیک راست کنید
– و برعکس ، من می خواهم یک صفحه نمایش ساده PLSU از یک منوی قطره ای را انتخاب کنم تا تاریخ ، اولویت ، لیست را انتخاب کنم … اگر فقط سه لیست دارم ، سه دکمه برای نمایش کافی خواهد بود و من می توانم لیست خود را انتخاب کنم با یک کلیک به جای کلیک بر روی منوی Drop -down ، نام را پیدا کنید و روی آن کلیک کنید. .

این جزئیات ارگونومی است. من سادگی و کارآیی TODO را دوست دارم ، بنابراین دوست دارم که حتی ساده تر هم تنظیم شود.

برنامه حریم خصوصی

توسعه دهنده ، Appigo ، جزئیات مربوط به شیوه های خصوصی و رسیدگی به داده ها را به اپل ارائه نداده است. برای اطلاعات بیشتر ، به سیاست حفظ حریم خصوصی توسعه مراجعه کنید.

معماری ModelView
رابط MVC مانند QT برای نمایش داده ها در نماها

از آنجا که شروع به ساختن برنامه های پیچیده تر با PYQT5 می کنید ، به احتمال زیاد با نگه داشتن ابزارک ها با داده های خود روبرو می شوید. داده های ذخیره شده در ویجت ها (E.جف. یک qlistwidget ساده) به راحتی برای دستکاری از پایتون در دسترس نیست – تغییرات شما را ملزم می کند تا یک مورد را بدست آورید ، داده ها را بدست آورید و سپس آن را دوباره تنظیم کنید. راه حل پیش فرض برای این کار ، نگه داشتن یک نمایش داده های خارجی در پایتون است ، و سپس Eith به روزرسانی های کپی را برای داده ها و ویجت ها به روز می کند ، یا به سادگی ویجت wihole را از داده ها بازنویسی می کند. این می تواند به سرعت زشت شود و فقط برای تهیه اطلاعات در مورد دیگهای بخار ایجاد شود.

خوشبختانه QT یک راه حل برای این کار دارد – ModelViews. ModelViews یک جایگزین قدرتمند برای ابزارک های نمایش استاندارد است ، که از یک رابط مدل معمولی برای تعامل با منابع داده استفاده می کنند – از ساختار داده های ساده گرفته تا بانکهای اطلاعاتی خارجی. این داده های شما را جدا می کند و به آن اجازه می دهد تا در هر ساختاری که دوست دارید نگه داشته شود ، در حالی که این نمای از ارائه و به روزرسانی مراقبت می کند.

این آموزش جنبه های اصلی معماری ModelView QT را معرفی می کند و از آن برای ساختن برنامه ساده دسک تاپ TODO در PYQT5 استفاده می کند.

کنترل کننده نمای مدل

مدل – مشاهده – کنترل کننده (MVC) یک الگوی معماری است که برای رابط های کاربر توسعه استفاده می کند که یک برنامه را به سه قسمت بهم پیوسته تقسیم می کند. این نمایش داخلی داده ها را از نحوه ارائه اطلاعات به کاربر جدا می کند.

طراحی MVC پاتن سه مؤلفه اصلی –

  • مدل ساختار داده ای را که برنامه با آن کار می کند نگه می دارد.
  • چشم انداز آیا نمایانگر اطلاعاتی است که به کاربر نشان داده شده است ، جایی که گرافیکی یا جدول. چندین نمایش از همان مدل داده مجاز است.
  • کنترل ورودی را از کاربر می پذیرد و آن را به دستورات برای مدل یا مشاهده تبدیل می کند.

این qt تمایز بین نمای و کنترلر کمی تیره و تار می شود. QT رویدادهای ورودی را از کاربر (از طریق سیستم عامل) می پذیرد و اینها را به ویجت ها (کنترل کننده) واگذار می کند تا. با این حال ، ویجت ها همچنین ارائه وضعیت فعلی به کاربر را انجام می دهند و آنها را به طور کامل در این نمایشگاه قرار می دهند. به جای اینکه از جایی که خط را ترسیم می کند ، در QT-S-Speak ، نمای و کنترلر ILEAD ادغام شده با یک مدل/ViewController “نمای مدل” به خاطر سادگی ادغام شده اند.

مهمتر ، تمایز بین داده ها وت چگونه ارائه می شود حفظ می شود.

نمای مدل

این مدل به عنوان رابط بین فروشگاه داده و ViewController عمل می کند. این مدل داده ها (یا یک مرجع به آن) را در خود نگه می دارد و این داده ها را از طریق یک API استاندارد ارائه می دهد که مشاهده می کند سپس مصرف می کند و به کاربر ارائه می دهد. چندین نمایش می تواند داده های یکسانی را به اشتراک بگذارد ، و آن را به روش های کاملاً متفاوت ارائه می دهد.

شما می توانید از هر “فروشگاه داده” برای مدل خود استفاده کنید ، به عنوان مثال یک لیست استاندارد یا فرهنگ لغت یا پایگاه داده استاندارد (از طریق E) (از طریق E).جف. sqlalchemy) – این به شما بستگی دارد.

دو بخش اساساً مسئول هستند –

  1. چای مدل داده ها را ذخیره می کند ، یا یک مرجع به آن را باز می گرداند و فردی یا دامنه سوابق ، و ابرداده های مرتبط را برمی گرداند نمایش دادن دستورالعمل ها.
  2. چای چشم انداز داده ها را از مدل درخواست می کند و آنچه را که در ویجت بازگردانده شده است نشان می دهد.

بحث عمیق در مورد معماری QT در مستندات وجود دارد.

راهنمای کامل بسته بندی برنامه های GUI Python با Pyinstaller.

بسته بندی برنامه های پایتون با pyinstaller

[تخفیف.تخفیف_ pc]]] ٪ تخفیف برای [تخفیف بعدی.مدت]] [تخفیف.توضیحات]] با کد [تخفیف.COUPON_CODE]]

برابری قدرت خرید

توسعه دهندگان در [[کشور]] [تخفیف را دریافت می کنند.تخفیف_ pc]]] در تمام کتاب ها و دوره ها با کد [تخفیف.COUPON_CODE]]

نمای مدل ساده – لیست TODO

برای نشان دادن نحوه استفاده از ModelViews در عمل ، ما یک اجرای بسیار ساده از لیست دسک تاپ TODO را جمع خواهیم کرد. این شامل یک qlistview برای لیست موارد ، یک qlineedit برای وارد کردن موارد جدید و مجموعه ای از دکمه ها برای اضافه کردن ، حذف یا علامت گذاری موارد همانطور که انجام شده است.

UI

UI ساده خالق Qt خالق بود و به عنوان MainWindow ذخیره شد.رابط . چای .پرونده UI و تمام قسمت های دیگر را می توان در زیر بارگیری کرد.

طراحی یک برنامه ساده Todo در Qt Creator

طراحی یک برنامه ساده Todo در Qt Creator

برنامه در حال اجرا در زیر نشان داده شده است.

The Running Todo GUI (هنوز هیچ چیز کار نمی کند)

The Running Todo GUI (هنوز هیچ چیز کار نمی کند)

ویجت های موجود در رابط ما به شناسه های نشان داده شده در جدول زیر داده ایم.

از روی بدبخت نوع شرح
نوپا qlistview لیست تودهای فعلی
نوپا qlineedit ورودی متن برای ایجاد یک مورد جدید TODO
افزودنی qpushbutton تودو جدید را ایجاد کنید و آن را به لیست TODOS اضافه کنید
حذف qpushbutton TODO منتخب فعلی را حذف کرده و آن را از لیست TODOS حذف کنید
کامل qpushbutton همانطور که انجام شده است TODO منتخب فعلی را علامت گذاری کنید

ما از این شناسه ها استفاده خواهیم کرد تا بعداً منطق برنامه را به هم وصل کنیم.

مدل

ما مدل سفارشی خود را با زیر طبقه بندی از پیاده سازی تعریف می کنیم و به ما این امکان را می دهیم که روی قطعات منحصر به فرد مدل خود تمرکز کنیم. QT تعدادی از پایه های مدل مختلف ، از جمله لیست ها ، درختان و جداول را ارائه می دهد (ایده آل برای صفحات گسترده).

برای این مثال ما نتیجه را به qlistview نشان می دهیم . مدل پایه تطبیق برای این کار QabStractlistModel است . تعریف طرح کلی برای مدل ما در زیر نشان داده شده است.

کلاس toDomodel (qtcore.qabstractlistmodel): def __init __ (خود ، *args ، todos = none ، ** kwargs): super (todomodel ، self).__init __ (*args ، ** kwargs) خود.Todos = Todos یا [] DEF DATA (خود ، فهرست ، نقش): اگر نقش == qt.DisplayRole: # برای ساختار داده به زیر مراجعه کنید. وضعیت ، متن = خود.تودوس [فهرست.ردیف ()] # متن TODO را فقط برگردانید. بازگشت متن def rowcount (خود ، فهرست): بازگشت لن (خود.تادوس) 

چای .متغیر TODOS فروشگاه داده ما است و دو روش RowCount () و داده ها () روش های مدل استاندارد هستند که ما باید برای یک مدل لیست. ما این موارد را به نوبه خود در زیر طی خواهیم کرد.

.لیست تودوس

فروشگاه داده برای مدل ما است .TODOS ، یک لیست ساده پایتون که در آن ما مقادیر مقادیر را در قالب [(BOOL ، STR) ، (BOOL ، STR) ، (BOOL ، STR)] ذخیره می کنیم از این رو حالت یک ورودی معین ، و Str متن TODO است.

ما خود را آغاز می کنیم.Todo به یک لیست خالی در زمان راه اندازی ، مگر اینکه لیستی از طریق آرگومان کلیدی TODOS وارد شود.

خود.TODOS = TODOS یا [] خود را تنظیم می کند.در صورتی که به مقدار Todos ارائه شده باشد باستانی (من.اشمیه. هر چیزی غیر از یک لیست خالی ، Boolean False یا هیچ یک از مقدار پیش فرض) ، در غیر این صورت روی لیست خالی تنظیم می شود [] .

برای ایجاد یک جبهه از این مدل می توانیم ساده –

MODEL = TODOMODEL () # یک لیست TODO خالی ایجاد کنید 

یا برای عبور در یک لیست موجود –

todos = [(نادرست ، "یک مورد") ، (نادرست ، "مورد دیگر")] مدل = toDomodel (TODOS) 

.شمارش ردیف ()

چای .روش rowcount () با نمای برای به دست آوردن تعداد ردیف ها در داده های فعلی ، callade است. این مورد برای مشاهده لازم است حداکثر شاخصی که می تواند فروشگاه داده را مجدداً تغییر دهد (Row Count-1). فروش ما از لیست پایتون به عنوان فروشگاه داده خود استفاده می کنیم ، مقدار بازده این کار به سادگی لن () لیست است.

.داده ها ()

این هسته اصلی مدل شما است ، که درخواست های داده ها را از نمایش می دهد و نتیجه مناسب را برمی گرداند. دو شاخص و نقش دو پارامتر دریافت می کند.

فهرست موقعیت/مختصات داده هایی است که نمای درخواست می کند ، که توسط دو روش قابل دسترسی است .ردیف () و .ستون () که در هر بعد موقعیت را نشان می دهد.

برای QlistView ما ستون همیشه 0 است و می توان آن را نادیده گرفت ، اما شما باید از این داده ها برای داده های 2D در یک صفحه گسترده استفاده کنید.

نقش پرچمی است که نشان می دهد نوع از داده هایی که نمای درخواست می کند. این به این دلیل است که .داده () روش در واقع مسئولیت بیشتری نسبت به داده های اصلی دارد. همچنین درخواست های مربوط به اطلاعات سبک ، تنظیمات ابزار ، میله های وضعیت و غیره را کنترل می کند. – به طور اساسی هر چیزی که توسط خود داده ها قابل اطلاع باشد.

نامگذاری qt.DisplayRole کمی عجیب است ، اما این نشان می دهد که چشم انداز از ما می پرسد “لطفاً برای نمایش داده به من بدهید”. موارد دیگری وجود دارد نقش که داده ها می توانند برای درخواست های یک ظاهر طراحی شده یا درخواست داده ها در قالب “ویرایش آماده” دریافت کنند.

نقش ارزش شرح
qt.نمایش دادن 0 داده های کلیدی که باید به صورت متن ارائه شود. (qstring)
qt.دستگاه دکوراسیون 1 داده هایی که باید به عنوان یک دکوراسیون به شکل یک نماد ارائه شود. (Qcolor ، QICON یا QPIXMAP)
qt.سرمقاله 2 داده های موجود در یک ویرایش در یک ویرایشگر دنبال می شوند. (qstring)
qt.دستگاه ابزاری 3 داده های نمایش داده شده در ابزار ابزار مورد. (qstring)
qt.استوایی 4 داده های نمایش داده شده در نوار وضعیت. (qstring)
qt.چه چیزی 5 داده های نمایش داده شده برای مورد در “این چیست?” روش. (qstring)
qt.اندازه 13 اندازه موردی که به نمای ارائه می شود. (qsize)

برای لیست کامل موجود نقش که می توانید مستندات qt itmdatarole را دریافت کنید. لیست TODO ما فقط از QT استفاده خواهد کرد.DisplayRole و QT.دستگاه دکوراسیون .

اجرای اصلی

در زیر برنامه خرد اصلی مورد نیاز برای بارگیری UI و نمایش آن است. ما کد مدل و منطق کاربرد خود را به این پایه اضافه خواهیم کرد.

واردات SYS از PYQT5 واردات qtcore ، qtgui ، qtwidgets ، uic از pyqt5.qtcore واردات qt_creator_file = "mainwindow.ui "ui_mainwindow ، qtbaseclass = uic.کلاس LoadUduype (qt_creator_file) کلاس toDomodel (qtcore.qabstractlistmodel): def __init __ (خود ، *args ، todos = none ، ** kwargs): super (todomodel ، self).__init __ (*args ، ** kwargs) خود.Todos = Todos یا [] DEF DATA (خود ، فهرست ، نقش): اگر نقش == qt.DisplayRole: وضعیت ، متن = خود.تودوس [فهرست.ردیف ()] بازگشت متن def rowcount (خود ، فهرست): بازگشت لن (خود.todos) کلاس mainwindow (qtwidgets.qmainwindow ، ui_mainwindow): def __init __ (خود): qtwidgets.qumainwindow.__init __ (خود) ui_mainwindow.__init __ (خود) خود.setupui (خود) خود.مدل = toDomodel () خود.نوپا.setModel (خود.مدل) برنامه = qtwidgets.QAPPLICATION (SYS.argv) پنجره = MainWindow () پنجره.برنامه () برنامه.EXEC_ () 

ما todomodel خود را مانند گذشته تعریف می کنیم و شیء MainWindow را اولیه می کنیم. در __init__ برای MainWindow نمونه ای از مدل TODO خود را ایجاد می کنیم و این مدل را در TODO_VIEW تنظیم می کنیم . این پرونده را به عنوان TODO ذخیره کنید.py و آن را اجرا کنید –

Python3 Todo.سرعت 

در حالی که هنوز چیزهای زیادی برای دیدن وجود ندارد ، QlistView و مدل ما در واقع کار می کنند – اگر برخی از داده های پیش فرض اضافه کنید ، می بینید که در لیست ظاهر می شود.

خود.model = toDomodel (todos = [(false ، "اولین کار من")]))) 

qlistview که مورد TODO با کد سخت را نشان می دهد

qlistview که مورد TODO با کد سخت را نشان می دهد

شما می توانید موارد را به صورت دستی مانند این اضافه کنید و آنها به ترتیب در qlistview ظاهر می شوند . بعد امکان اضافه کردن ITM از داخل برنامه را فراهم می کنیم.

ابتدا یک روش جدید در MainWindow با نام ADD ایجاد کنید . این پاسخ به تماس ماست که مراقبت از اضافه کردن متن فعلی از ورودی به عنوان یک TODO جدید است. این روش را به addbutton وصل کنید.سیگنال فشرده شده در انتهای بلوک __init__.

کلاس mainwindow (qtwidgets.qmainwindow ، ui_mainwindow): def __init __ (خود): qtwidgets.qumainwindow.__init __ (خود) ui_mainwindow.__init __ (خود) خود.setupui (خود) خود.مدل = toDomodel () خود.نوپا.setModel (خود.مدل) # دکمه را وصل کنید. خود.افزودنی.مطبوعات.اتصال (خود.اضافه کردن) def add (خود): "" یک مورد را به لیست TODO ما اضافه کنید ، و متن را از qlineedit دریافت کنید .Todoedit و در آنجا پاک کردن آن. "" "متن = خود.نوپا.متن () اگر متن: # رشته های خالی اضافه نکنید. # از طریق مدل به لیست دسترسی پیدا کنید. خود.مدل.تادو.ضمیمه ((نادرست ، متن)) # Trigger Refresh. خود.مدل.چیدمان.انتشار () # خود ورودی را خالی کنید.نوپا.settext ("") 

در افزودن بلوک خود خط خود را اعلام کنید.مدل.چیدمان.بیرون ریختن () . در اینجا ما یک سیگنال مدل را منتشر می کنیم .طرح بندی شده برای اینکه به این نمای اطلاع دهد که شکل از داده ها تغییر یافته است. این باعث تجدید موجودیت نمای می شود. اگر این خط را حذف کنید ، Todo هنوز هم اضافه می شود اما QlistView به روز نمی شود.

اگر فقط داده ها تغییر یافته باشند ، اما تعداد ردیف ها/ستون ها بی تأثیر هستند ، می توانید از آن استفاده کنید .در عوض سیگنال datachanged (). این همچنین یک منطقه تغییر یافته در داده ها را با استفاده از یک اجاره بالا سمت چپ و پایین راست تعریف می کند تا از بازگرداندن نمای نمای کل جلوگیری شود.

اقدامات دیگر

اکنون می توانیم بقیه سیگنال های دکمه را وصل کنیم و برای عملکرد کمک می کنیم حذف وت کامل عمل. ما سیگنال های دکمه را مانند گذشته به بلوک __init__ اضافه می کنیم.

 خود.افزودنی.مطبوعات.اتصال (خود.اضافه کردن) خود.حذف.مطبوعات.اتصال (خود.حذف) خود.کامل.مطبوعات.اتصال (خود.کامل) 

سپس یک روش حذف جدید را به شرح زیر تعریف کنید –

 Def Delete (خود): indexes = خود.نوپا.SelectedDindexes () اگر ایندکس ها: # Indexes لیستی از یک مورد واحد در تک انتخاب است. index = فهرست [0] # مورد را حذف کرده و تازه کنید. دلتنگ.مدل.تودوس [فهرست.ردیف ()] خود.مدل.چیدمان.انتشار () # انتخاب را پاک کنید (زیرا مدت طولانی معتبر نیست). خود.نوپا.clarselection () 

ما از خود استفاده می کنیم.نوپا.SelectedDindexes برای به دست آوردن شاخص ها (در واقع لیستی از یک مورد واحد ، همانطور که ما در حالت تک انتخاب هستیم) و سپس .ردیف () به عنوان شاخص در لیست ما از مدل های ما در مدل ما. ما مورد فهرست شده را با استفاده از اپراتور DEL Python حذف می کنیم ، و سپس یک سیگنال تغییر یافته را ایجاد می کنیم زیرا شکل داده ها اصلاح شده است.

به طور نهایی ، ما انتخاب فعال را از آنجا که موردی که مربوط به آن است ممکن است از مرزها پاک کنیم (اگر آخرین مورد را انتخاب کرده اید).

می توانید این Smartter را امتحان کنید و به جای آن آخرین مورد را در لیست انتخاب کنید

روش کامل مانند این –

 Def Complete (خود): indexes = خود.نوپا.SelectredIndexes () اگر ایندکس ها: فهرست = شاخص ها [0] ردیف = فهرست.ردیف () وضعیت ، متن = خود.مدل.تادوس [ردیف] خود.مدل.todos [row] = (درست ، متن) # .Datachanged می گیرد سمت چپ و پایین سمت راست ، که برای یک انتخاب واحد برابر است. خود.مدل.دایی.انتشار (فهرست ، فهرست) # انتخاب را پاک کنید (زیرا هیچ اعتبار طولانی نیست). خود.نوپا.clarselection () 

این از همان نمایه سازی برای حذف استفاده می کند ، اما این بار ما مورد را از مدل می گیریم .لیست TODOS و سپس وضعیت را با TRUE جایگزین کنید .

ما باید این واکشی و تنظیم را انجام دهیم ، زیرا داده های ما به عنوان Tuples Python ذخیره می شوند که قابل اصلاح نیستند.

کلیدی متفاوت در اینجا در مقابل. ویجت های استاندارد QT این است که ما مستقیماً به داده های خود تغییر می دهیم و به راحتی باید به QT اطلاع دهیم که Haasurd را تغییر می دهد – به روزرسانی حالت ویجت به طور خودکار انجام می شود.

با استفاده از QT.دستگاه دکوراسیون

اگر اکنون برنامه را اجرا کردید ، باید متوجه شوید که اضافه کردن و حذف هر دو کار ، اما در حالی که تکمیل موارد کار می کند ، هیچ نشانه ای از آن در نمای وجود ندارد. ما باید مدل خود را به روز کنیم تا نمای را با یک نشانگر ارائه دهیم تا هنگام تکمیل یک مورد نمایش داده شود. مدل به روز شده در زیر نشان داده شده است.

تیک = qtgui.QIMAGE ('تیک.png ') کلاس toDomodel (qtcore.qabstractlistmodel): def __init __ (خود ، *args ، todos = none ، ** kwargs): super (todomodel ، self).__init __ (*args ، ** kwargs) خود.Todos = Todos یا [] DEF DATA (خود ، فهرست ، نقش): اگر نقش == qt.DisplayRole: _ ، متن = خود.تودوس [فهرست.ردیف ()] متن را اگر نقش == qt.دکوراسیون: وضعیت ، _ = خود.تودوس [فهرست.ردیف ()] در صورت وضعیت: بازگشت TICK DEF ROWCOUNT (خود ، فهرست): بازگشت لن (خود.تادوس) 

از یک نماد کنه استفاده می کردند.PNG برای نشان دادن موارد کامل ، که ما در یک شیء QIMAGE به نام TICK بارگیری می کنیم . در مدل ما یک کنترل کننده را برای QT کشف کردیم.DecorationRole که نماد تیک را برای ردیف هایی که وضعیت Who Who Round را برمی گرداند ، باز می گرداند (برای کامل).

نمادی که من استفاده می کنم از Fugue تنظیم شده توسط P گرفته شده است.یوزوکامیمیا

intostad از یک نماد I شما همچنین می توانید به رنگ ، E.جف. qtgui.qcolor (“سبز”) که به عنوان مربع جامد ترسیم می شود.

با اجرای برنامه اکنون باید بتوانید موارد را به صورت کامل علامت گذاری کنید.

تودوس کامل مشخص شد

تودوس کامل مشخص شد

یک فروشگاه داده مداوم

برنامه TODO ما به خوبی کار می کند ، اما یک نقص مهلک دارد-به محض اینکه برنامه را ببندید ، تودهای شما را فراموش می کند در حالی که فکر می کنید هیچ کاری برای انجام دادن ندارید ممکن است در احساس کوتاه مدت ذن مشارکت کنید ، احتمالاً این احتمالاً یک است ایده بد.

راه حل اجرای برخی از فروشگاه های فروشگاه داده مداوم است. ساده ترین روش یک فروشگاه فایل ساده است ، جایی که ما در هنگام راه اندازی موارد را از یک فایل JSON یا ترشی بارگیری می کنیم و دوباره تغییر می دهیم.

برای این کار ما دو روش جدید را در دست خود تعریف می کنیم . این داده های بارگیری از داده های نام پرونده JSON.Json (اگر وجود داشته باشد ، در صورت عدم وجود خطای خود را نادیده بگیرید) به خود.مدل.تادوس و نوشتن خود فعلی.مدل.به ترتیب به همان پرونده تودوس می شود.

 def load (خود): سعی کنید: با داده های باز (".json '،' r ') به عنوان f: خود.مدل.todos = json.بار (F) استثناء استثنا: Pass Def Save (self): با داده های باز ('.json '،' w ') as f: data = json.زباله (خود.مدل.Todos ، f) 

برای ادامه تغییرات در داده ها برای اضافه کردن .ذخیره () کنترل کننده به پایان هر روشی که داده ها را تغییر می دهد و .بار () کنترل کننده به بلوک __init__ پس از ایجاد مدل.

کد نهایی به این شکل است –

واردات سیستم واردات json از pyqt5 واردات qtcore ، qtgui ، qtwidgets ، uic از pyqt5.qtcore واردات qt_creator_file = "mainwindow.ui "ui_mainwindow ، qtbaseclass = uic.LoadudUseype (qt_creator_file) تیک = qtgui.QIMAGE ('تیک.png ') کلاس toDomodel (qtcore.qabstractlistmodel): def __init __ (خود ، *args ، todos = none ، ** kwargs): super (todomodel ، self).__init __ (*args ، ** kwargs) خود.Todos = Todos یا [] DEF DATA (خود ، فهرست ، نقش): اگر نقش == qt.DisplayRole: _ ، متن = خود.تودوس [فهرست.ردیف ()] متن را اگر نقش == qt.دکوراسیون: وضعیت ، _ = خود.تودوس [فهرست.ردیف ()] در صورت وضعیت: بازگشت TICK DEF ROWCOUNT (خود ، فهرست): بازگشت لن (خود.todos) کلاس mainwindow (qtwidgets.qmainwindow ، ui_mainwindow): def __init __ (خود): فوق العاده (mainwindow ، خود).__در خود.setupui (خود) خود.مدل = toDomodel () خود.بار () خود.نوپا.setModel (خود.مدل) خود.افزودنی.مطبوعات.اتصال (خود.اضافه کردن) خود.حذف.مطبوعات.اتصال (خود.حذف) خود.کامل.مطبوعات.اتصال (خود.کامل) def add (خود): "" "یک مورد را به لیست TODO ما اضافه کنید و متن را از qlineedit دریافت کنید .Todoedit و در آنجا پاک کردن آن. "" "متن = خود.نوپا.متن () اگر متن: # رشته های خالی اضافه نکنید. # از طریق مدل به لیست دسترسی پیدا کنید. خود.مدل.تادو.ضمیمه ((نادرست ، متن)) # Trigger Refresh. خود.مدل.چیدمان.انتشار () # خود ورودی را خالی کنید.نوپا.settext ("") خود.ذخیره () def delete (خود): indexes = خود.نوپا.SelectedDindexes () اگر ایندکس ها: # Indexes لیستی از یک مورد واحد در تک انتخاب است. index = فهرست [0] # مورد را حذف کرده و تازه کنید. دلتنگ.مدل.تودوس [فهرست.ردیف ()] خود.مدل.چیدمان.انتشار () # انتخاب را پاک کنید (زیرا مدت طولانی معتبر نیست). خود.نوپا.Clarselection () خود.ذخیره () def کامل (خود): indexes = خود.نوپا.SelectredIndexes () اگر ایندکس ها: فهرست = شاخص ها [0] ردیف = فهرست.ردیف () وضعیت ، متن = خود.مدل.تادوس [ردیف] خود.مدل.todos [row] = (درست ، متن) # .Datachanged می گیرد سمت چپ و پایین سمت راست ، که برای یک انتخاب واحد برابر است. خود.مدل.دایی.انتشار (فهرست ، فهرست) # انتخاب را پاک کنید (زیرا هیچ اعتبار طولانی نیست). خود.نوپا.Clarselection () خود.ذخیره () def load (self): سعی کنید: با داده باز ('.db '،' r ') به عنوان f: خود.مدل.todos = json.بار (F) استثناء استثنا: Pass Def Save (self): با داده های باز ('.db '،' w ') as f: data = json.زباله (خود.مدل.Todos ، f) برنامه = qtwidgets.QAPPLICATION (SYS.argv) پنجره = MainWindow () پنجره.برنامه () برنامه.EXEC_ () 

اگر داده های موجود در برنامه شما این امکان را دارد که بزرگ یا پیچیده تر شود ، می توانید از یک پایگاه داده واقعی برای ذخیره آن استفاده کنید. در این حالت مدل رابط را به پایگاه داده می بندد و آن را مستقیماً برای نمایش داده ها پرس و جو می کند. پوشش lll چگونه می توان این کار را در یک آموزش آینده انجام داد.

برای مثال جالب دیگر از qlistview به این مثال برنامه پخش کننده رسانه مراجعه کنید. از ساختمان QMediaPlayList به عنوان DataStore استفاده می کند ، با نمایش محتویات به qlistview .

درباره BCR.CX:

بکر.CX یک راه اندازی فناوری برزیل است ، که در هر دو فرآیند برون سپاری تجاری (BPO) و برون سپاری محیط زیست (BEO) تخصصی است ، که عمدتاً روی تولید تقاضا ، تجربه مشتری ، ارتباطات ، پشتیبانی کاربر و رضایت کاربر متمرکز شده است.

شرح:

برنامه TODO به عنوان روشی سریع ، ایمن و کاربر پسند برای ذخیره یادداشت های عامل در روزهای کاری تهیه شده است.

بر اساس هر بلیط یا مشتری شخصی قادر به ایجاد و مدیریت وظایف خود باشید.

مسیرهای پیاده روی ایجاد کنید و گردش کار خود را سفارشی کنید

بهره وری افزایش می یابد! با استفاده از برنامه TODO می توانید گردش کار سفارشی را برای استاندارد سازی فرایندهای تکراری ایجاد کنید. اکنون امتحان کنید و به عنوان تودز و دونس ، کنترل پیشرفت خود را شروع کنید.

منابع:

  1. برای هر بلیط وظایفی ایجاد کنید
  2. نوار پیشرفت برای پیگیری تحویل
  3. برای افزایش بهره وری ، گردش کار استاندارد ایجاد کنید.
  4. لیست وظیفه خود را مدیریت کنید تا بتوانید آن را با کارهای روزمره خود ادامه دهید.
  1. Sunshine Todo و Zendesk را برای دستیابی کامل از ویژگی های برنامه جمع کنید
  2. با ایجاد یا ویرایش اتوماسیون وظایف ، بهره وری را بهبود بخشید و از پیش تنظیم شده شخصی خود را ذخیره کنید.