Питхон

Како написати једноставан уређивач текста у ПиКт5

Како написати једноставан уређивач текста у ПиКт5
Овај чланак покрива водич за стварање једноставног уређивача текста у Питхон3 и ПиКт5. Кт5 је скуп унакрсних библиотека написаних на језику Ц ++, који се углавном користе за стварање богатих графичких апликација. ПиКт5 пружа Питхон везе за најновију верзију Кт5. Сви узорци кода у овом чланку тестирани су са Питхон 3.8.2 и ПиКт5 верзија 5.14.1 на Убунту 20.04.

Инсталирање ПиКт5 у Линук

Да бисте инсталирали ПиКт5 у најновијој верзији Убунту-а, покрените наредбу:

$ судо апт инсталирајте питхон3-пикт5

Ако користите било коју другу Линук дистрибуцију, потражите појам „Пикт5“ у менаџеру пакета и инсталирајте га одатле. Алтернативно, можете инсталирати ПиКт5 из менаџера пакета пип помоћу наредбе доле:

$ пип инсталирај пикт5

Имајте на уму да ћете у неким дистрибуцијама можда морати да користите команду пип3 да бисте правилно инсталирали ПиКт5.

Фулл Цоде

Претходно објављујем пуни код како бисте могли боље разумети контекст за појединачне исечке кода објашњене касније у чланку. Ако сте упознати са Питхоном и ПиКт5, можете се само позвати на доњи код и прескочити објашњење.

#!/ уср / бин / енв питхон3
импорт сис
од ПиКт5.КтВидгетс увозе КВидгет, КАпплицатион, КВБокЛаиоут, КХБокЛаиоут
од ПиКт5.КтВидгетс увозе КТектЕдит, КЛабел, КСхортцут, КФилеДиалог, КМессагеБок
од ПиКт5.КтГуи увози ККеиСекуенце
из ПиКт5 увоза Кт
Прозор класе (КВидгет):
деф __инит __ (селф):
супер ().__у томе__()
себе.филе_патх = Нема
себе.опен_нев_филе_схортцут = КСхортцут (ККеиСекуенце ('Цтрл + О'), само)
себе.опен_нев_филе_схортцут.активирано.повезати (само.опен_нев_филе)
себе.саве_цуррент_филе_схортцут = КСхортцут (ККеиСекуенце ('Цтрл + С'), само)
себе.саве_цуррент_филе_схортцут.активирано.повезати (само.саве_цуррент_филе)
вбок = КВБокЛаиоут ()
тект = "Датотека без наслова"
себе.титле = КЛабел (текст)
себе.наслов.сетВордВрап (тачно)
себе.наслов.сетАлигнмент (Кт.Кт.АлигнЦентер)
вбок.аддВидгет (селф.наслов)
себе.сетЛаиоут (вбок)
себе.сцроллабле_тект_ареа = КТектЕдит ()
вбок.аддВидгет (селф.сцроллабле_тект_ареа)
деф опен_нев_филе (селф):
себе.пут до датотеке, филтер_типе = КФилеДиалог.гетОпенФилеНаме (селф, "Отвори нову датотеку",
"", "Све датотеке (*)")
ако ја.пут до датотеке:
са отвореним (само.пут до датотеке, "р") као ф:
филе_цонтентс = ф.читати()
себе.наслов.сетТект (селф.филе_патх)
себе.сцроллабле_тект_ареа.сетТект (садржај_датотеке)
иначе:
себе.инвалид_патх_алерт_мессаге ()
деф саве_цуррент_филе (селф):
ако не и себе.пут до датотеке:
нев_филе_патх, филтер_типе = КФилеДиалог.гетСавеФилеНаме (селф, "Сачувај ову датотеку
као ... "," "," Све датотеке (*) ")
иф нев_филе_патх:
себе.филе_патх = нев_филе_патх
иначе:
себе.инвалид_патх_алерт_мессаге ()
повратак Нетачно
филе_цонтентс = селф.сцроллабле_тект_ареа.тоПлаинТект ()
са отвореним (само.филе_патх, "в") као ф:
ф.писање (филе_цонтентс)
себе.наслов.сетТект (селф.филе_патх)
деф цлосеЕвент (селф, догађај):
мессагеБок = КМессагеБок ()
титле = "Затвори пријаву?"
мессаге = "УПОЗОРЕЊЕ !!\ н \ нАко напустите систем без чувања, све промене направљене у датотеци
ће бити изгубљени.\ н \ нСпремите датотеку пре него што изађете?"
репли = мессагеБок.питање (ја, наслов, порука, мессагеБок.Да | мессагеБок.Не |
мессагеБок.Откажи, мессагеБок.Поништити, отказати)
ако је одговор == мессагеБок.Да:
ретурн_валуе = селф.саве_цуррент_филе ()
иф ретурн_валуе == Фалсе:
догађај.занемари ()
елиф репли == мессагеБок.Не:
догађај.прихвати ()
иначе:
догађај.занемари ()
деф инвалид_патх_алерт_мессаге (селф):
мессагеБок = КМессагеБок ()
мессагеБок.сетВиндовТитле ("Неважећа датотека")
мессагеБок.сетТект ("Изабрано име датотеке или путања није важећа. Молимо одаберите а
важећа датотека.")
мессагеБок.екец ()
ако је __наме__ == '__главно__':
апп = КАпплицатион (сис.аргв)
в = прозор ()
в.сховМакимизед ()
сис.излаз (апп.екец_ ())

Објашњење

Први део кода само увози модуле који ће се користити у целом узорку:

импорт сис
од ПиКт5.КтВидгетс увозе КВидгет, КАпплицатион, КВБокЛаиоут, КХБокЛаиоут
од ПиКт5.КтВидгетс увозе КТектЕдит, КЛабел, КСхортцут, КФилеДиалог, КМессагеБок
од ПиКт5.КтГуи увози ККеиСекуенце
из ПиКт5 увоза Кт

У следећем делу креира се нова класа названа „Виндов“ која наслеђује класу „КВидгет“. Класа КВидгет пружа најчешће коришћене графичке компоненте у Кт. Кориштењем „супер“ можете осигурати да се врати надређени Кт објект.

Прозор класе (КВидгет):
деф __инит __ (селф):
супер ().__у томе__()

Неке променљиве су дефинисане у следећем делу. Путања до датотеке је подразумевано постављена на „Ништа“ и пречице за отварање датотеке помоћу и чување датотеке помоћу дефинишу се помоћу класе КСхортцут. Те се пречице затим повезују са одговарајућим методама које се позивају сваки пут када корисник притисне дефинисане комбинације тастера.

себе.филе_патх = Нема
себе.опен_нев_филе_схортцут = КСхортцут (ККеиСекуенце ('Цтрл + О'), само)
себе.опен_нев_филе_схортцут.активирано.повезати (само.опен_нев_филе)
себе.саве_цуррент_филе_схортцут = КСхортцут (ККеиСекуенце ('Цтрл + С'), само)
себе.саве_цуррент_филе_схортцут.активирано.повезати (само.саве_цуррент_филе)

Коришћењем класе КВБокЛаиоут креира се нови изглед којем ће се додати подређени виџети. Ознака поравната по средини поставља се за подразумевано име датотеке помоћу класе КЛабел.

вбок = КВБокЛаиоут ()
тект = "Датотека без наслова"
себе.титле = КЛабел (текст)
себе.наслов.сетВордВрап (тачно)
себе.наслов.сетАлигнмент (Кт.Кт.АлигнЦентер)
вбок.аддВидгет (селф.наслов)
себе.сетЛаиоут (вбок)

Даље, текстуално подручје се додаје у изглед помоћу објекта КТектЕдит. Виџет КТектЕдит ће вам пружити област за померање која се може уређивати и са којом можете радити. Овај виџет подржава типично копирање, лепљење, исецање, поништавање, понављање, одабир свих итд. пречице на тастатури. Такође можете да користите контекстни мени десним кликом унутар текстуалне области.

себе.сцроллабле_тект_ареа = КТектЕдит ()
вбок.аддВидгет (селф.сцроллабле_тект_ареа)

Метода „опен_нев_фие“ позива се када корисник заврши тастерска пречица. Класа КФилеДиалог представља дијалог за одабир датотека кориснику. Путања до датотеке одређује се након што корисник одабере датотеку из бирача. Ако је путања до датотеке важећа, текст се чита из датотеке и поставља на КТектЕдит виџет. Ово чини текст видљивим за корисника, мења наслов у ново име датотеке и довршава поступак отварања нове датотеке. Ако се из неког разлога не може одредити путања датотеке, кориснику се приказује оквир упозорења „неважећа датотека“.

деф опен_нев_филе (селф):
себе.пут до датотеке, филтер_типе = КФилеДиалог.гетОпенФилеНаме (селф, "Отвори нову датотеку", "",
"Све датотеке (*)")
ако ја.пут до датотеке:
са отвореним (само.пут до датотеке, "р") као ф:
филе_цонтентс = ф.читати()
себе.наслов.сетТект (селф.филе_патх)
себе.сцроллабле_тект_ареа.сетТект (садржај_датотеке)
иначе:
себе.инвалид_патх_алерт_мессаге ()

Метода „саве_цуррент_филе“ позива се кад год корисник доврши тастерска пречица. Уместо да преузме нову путању датотеке, КФилеДиалог сада тражи од корисника да наведе путању. Ако је путања датотеке важећа, садржај видљив у виџету КТектЕдит записује се у целу путању датотеке, у супротном се приказује поље упозорења „неважећа датотека“. Наслов датотеке која се тренутно уређује такође се мења на нову локацију коју је обезбедио корисник.

деф саве_цуррент_филе (селф):
ако не и себе.пут до датотеке:
нев_филе_патх, филтер_типе = КФилеДиалог.гетСавеФилеНаме (селф, "Сачувај ову датотеку
као ... "," "," Све датотеке (*) ")
иф нев_филе_патх:
себе.филе_патх = нев_филе_патх
иначе:
себе.инвалид_патх_алерт_мессаге ()
повратак Нетачно
филе_цонтентс = селф.сцроллабле_тект_ареа.тоПлаинТект ()
са отвореним (само.филе_патх, "в") као ф:
ф.писање (филе_цонтентс)
себе.наслов.сетТект (селф.филе_патх)

Метода „цлосеЕвент“ је део АПИ-ја за руковање догађајима ПиКт5. Ова метода се позива кад год корисник покуша да затвори прозор помоћу дугмета за попречно или притиском на тастер комбинација тастера. Приликом активирања догађаја затварања, кориснику се приказује дијалошки оквир са три избора: „Да“, „Не“ и „Откажи“. Дугме „Да“ спрема датотеку и затвара апликацију, док дугме „Не“ затвара датотеку без чувања садржаја. Дугме „Откажи“ затвара дијалошки оквир и враћа корисника у апликацију.

деф цлосеЕвент (селф, догађај):
мессагеБок = КМессагеБок ()
титле = "Затвори пријаву?"
мессаге = "УПОЗОРЕЊЕ !!\ н \ нАко напустите систем без чувања, извршиће се све промене направљене у датотеци
бити изгубљен.\ н \ нСпремите датотеку пре него што изађете?"
репли = мессагеБок.питање (ја, наслов, порука, мессагеБок.Да | мессагеБок.Не |
мессагеБок.Откажи, мессагеБок.Поништити, отказати)
ако је одговор == мессагеБок.Да:
ретурн_валуе = селф.саве_цуррент_филе ()
иф ретурн_валуе == Фалсе:
догађај.занемари ()
елиф репли == мессагеБок.Не:
догађај.прихвати ()
иначе:
догађај.занемари ()

Оквир за упозорење „неважећа датотека“ нема никаквих звона и звиждука. Само преноси поруку да није могуће одредити путању датотеке.

деф инвалид_патх_алерт_мессаге (селф):
мессагеБок = КМессагеБок ()
мессагеБок.сетВиндовТитле ("Неважећа датотека")
мессагеБок.сетТект ("Изабрано име датотеке или путања није важећа. Изаберите важећу датотеку.")
мессагеБок.екец ()

На крају, главна апликациона петља за руковање догађајима и цртање виџета покреће се помоћу „.метода екец_ () ”.

ако је __наме__ == '__главно__':
апп = КАпплицатион (сис.аргв)
в = прозор ()
в.сховМакимизед ()
сис.излаз (апп.екец_ ())

Покретање апликације

Само сачувајте пуни код у текстуалну датотеку, подесите екстензију датотеке на „.пи ”, означите извршну датотеку и покрените је да бисте покренули апликацију. На пример, ако је име датотеке „симпле_тект_едитор.пи ”, потребно је да покренете две наредбе:

$ цхмод + к симпле_тект_едитор.пи
$ ./ симпле_тект_едитор.пи

Ствари које можете учинити да бисте побољшали код

Горе објашњени код добро функционише за уређивач текста без голих костију. Међутим, можда није корисно у практичне сврхе, јер му недостају многе функције које се често виде у добрим уређивачима текста. Код можете побољшати додавањем нових функција као што су бројеви редова, истицање линија, истицање синтаксе, више картица, чување сесија, трака са алаткама, падајући менији, откривање промене бафера итд.

Закључак

Овај чланак се углавном фокусира на пружање полазне основе за стварање ПиКт апликација. Ако у коду пронађете грешке или желите нешто да предложите, повратне информације су добродошле.

Водич за ОпенТТД
ОпенТТД је једна од најпопуларнијих игара за пословну симулацију. У овој игри морате створити диван посао превоза. Међутим, почет ћете у почетку око 1...
СуперТукКарт за Линук
СуперТукКарт је сјајан наслов дизајниран да вам пружи Марио Карт искуство бесплатно на вашем Линук систему. Прилично је изазовно и забавно играти, диз...
Водич за битку за Веснотх
Битка за Веснотх је једна од најпопуларнијих стратешких игара отвореног кода које тренутно можете играти. Не само да је ова игра у развоју већ јако ду...