PyGTK 3: урок за мини GUI с Python + GTK + 3

Ще направим малка програма с PyGTK 3.0, която работи и за PyGTK 3.4. Този малък GUI ще ви научи как да разделите програма на два или повече файла.

Можете да посетите урока на Sebastian Pölsterl за новия PyGTK 3, ето новия урок, оставям връзката:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Това е блогът на Себастиан.

http://k-d-w.org/node/88

Една от критиките на този урок от Себастиан е, че той не учи как да се разделя програма на части или на няколко файла, би било добре, ако той показа пример как да се направи с PyGTK 3.

Всички големи и сложни програми са разделени на много файлове и файловете дори се поставят в други директории, тоест те се намират в различни папки.

Нека започнем с малкия пример:

Ето кода за писане в един файл, наречен gui.py. Отваряме текстовия редактор Gedit или редактора, който използваме най-много, копираме кода по-долу и го запазваме като gui.py

от gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Отворен \ "бутонът беше щракнат" def on_close_clicked (self, button): print "Затваряне на приложение" Gtk.main_quit () def __init__ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) self. button = Gtk.Button (label = 'Open') self.button.connect ("щракнат", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("щракнат", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

фронтон

def on_open_clicked (самостоятелно, бутон): разпечатай "\" Отворен \ ", щракнат бутон

Това е функция, която се активира в терминала, когато щракнем върху бутона за отваряне. Сигналът за активирането му е:

self.button.connect ("щракнат", self.on_open_clicked) def on_close_clicked (self, бутон): print "Затваряне на приложение" Gtk.main_quit ()

Това е функция, която се активира, когато щракнем върху бутона за затваряне.

затворете програмата, която изпълняваме.

сигналът за активирането му е

self.button.connect ("щракнат", self.on_close_clicked) от gi.repository import Gtk ### извикваме PyGTK библиотеки ### class gui (): ### дефиниция на клас наречена gui е основният клас # ##

Декларация за джаджи: джаджи е програма, предварително определена от GUI библиотеките, които използваме. Например джаджи е бутон, прозорец, кутия и т.н. Това са приспособленията, които декларираме в нашата програма.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # бутон за отваряне #### self.button = Gtk.Button (label = 'Close') #### бутон за затваряне #### self.window.add (self.box) #### полето се съдържа в прозорецът, наречен window #### self.box.pack_start (self.button, True, True, 0) ##### бутонът се съдържа в полето, наречено box ### self.window.show_all () ## # показваме целия прозорец ### gui = gui () ### създаваме gui обект ####

Поставяме нашата програма в папка, наречена в нашия случай проста на работния плот

тер

Отваряме папката с терминала, в моя случай използвам Nemo от Linux Mint 14.

затворен

За компилиране поставяме в терминала python gui.py

вижте снимката.

терминал

Сега можем да видим нашата малка програма или нова джаджа, създадена с библиотеките PyGTK 3

Това е прост прозорец с два бутона.

Неозаглавен

Сега разделяме програмата на три части, след което оставям кода на трите файла.

Първи файл gui.py

от gi.repository импортиране на Gtk от унищожаване импортиране унищожаване от io импортиране io клас gui (унищожи, io): def __init __ (самостоятелно): self.window = Gtk.Window () self.window.connect ('delete-event' Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (label = 'Open') self.button.connect ("щракнат", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("щракнат", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () ако __name__ == '__main__': gui = gui ()

Втори файл io.py

class io: def on_open_clicked (self, button): print "\" Отваря се \

Трети файл Унищожи.py

от gi.repository импортиране на клас Gtk унищожаване: def on_close_clicked (самостоятелно, бутон): печат "Затваряне на приложение" Gtk.main_quit ()

Поставяме трите файла в една и съща папка в нашия случай, папката се нарича просто разделена.

прост

За да компилирате трите файла. Отваряме папката с терминала и просто я поставяме обратно в терминала

python gui.py

Модификации, направени в gui.py кода

от унищожи внос унищожи ### инструкция за импортиране на нашия файл Унищожи файл ### от io импортиране Io ### инструкция за импортиране на нашия файл io.py ### клас gui (унищожи, io): #### в клас main добавяме подкласовете разрушаване и io ####

Виждате, че изречението

def on_open_clicked (самостоятелно, бутон): разпечатай "\" Отворен \ ", щракнат бутон

Той не е в gui.py, а във файла io.py

Изречение

def on_close_clicked (самостоятелно, бутон):

print "Затваряне на приложение"
Gtk.main_quit ()

той се намира във файла Унищожи

По този начин можем да разделим една програма на много файлове, намиращи се в различни директории едновременно.

От друга страна, Python е стълб на свободен софтуер и е адаптиран да работи с GTK 3.6 /3.8, името му е PyGTK. Адаптацията на Python за KDE се нарича PyQT.

Python е адаптиран за Mac OS и WINDOWS.

Надявам се, че този мини урок на PyGTK3 е бил полезен за вас. Те могат да отправят всички конструктивни критики, които искат.

Познавам и някои Gtk 3.4 /3.6 и Vala GTK 3.4 / 3.6.

http://www.youtube.com/watch?v=9ckRn_sx8CE

И накрая, потребителите на KDE се извиняват, че не са направили мини урок за KDE.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Гниене87 каза той

    В kde предпочитам да използвам kdevelop (мисля, че така се нарича), за да създам gui спокойно, но все още трудно намирам процесите, за да го направя x нещо: '(

  2.   st0rmt4il каза той

    Страхотно за тези от нас, които използваме Python: D!

    Поздрави!

  3.   Пабло каза той

    Здравейте, следя тази общност от дълго време и не съм много сигурен дали за първи път коментирам или вече съм го правил преди соя (наистина не ми е много да пиша коментари в мрежата). Работата е там, че го правя, за да оставя предложение на Elav и KZKG ^ Gaara като администратори и мисля, че би било добра идея да добавите приставка за оцветяване на синтаксис сега, когато напоследък виждам повече публикации с код на различни езици за програмиране. Знам, че има доста приставки, но не съм пробвал нито един, тъй като не съм потребител на wordpress, затова ви оставям да помислите за жизнеспособността на заявката. Използвам възможността да попитам останалите читатели какво мислят за идеята, защото знам, че има хора, които предпочитат да четат кода без никакви украшения. Извинявам се, ако това вече е коментирано тук и е отхвърлено по някаква причина, тъй като не помня да съм виждал дискусия по темата.

    1.    марианогаудикс каза той

      Истината е, че бих искал да имам възможност да оцветя синтаксиса, за да подчертая кода на програмните езици.
      Това би помогнало на потребители, които искат да научат езици за програмиране.

      Хей, аз също се чувствам добре с форума и че можем да обсъждаме и да учим заедно.

      1.    eliotime3000 каза той

        GNU Emacs е по-удобен, тъй като поне трябва да изберете на коя програма за проверка на езика за програмиране искате да работите (ако не искате по-голяма тежест за вашия процесор, използвайте GNU Nano и се наслаждавайте на минимализма в най-добрия случай).

        1.    марианогаудикс каза той

          Елио, говорим за WordPress. Внедрено в блога Desde Linux. Няма функции за оцветяване на буквите на постовете.

          1.    eliotime3000 каза той

            О, съжалявам.

        2.    pandev92 каза той

          Naaa emacs е удобен за тези, които имат 84 пръста XD .., нормални хора, textmate, sublimetext или notepad ++ xd

          1.    eliotime3000 каза той

            Малко вероятно е, че не сте се научили да пишете, което е необходимо, за да можете да се справите добре с GNU Emacs и неговите клавишни комбинации. В допълнение, неговият GUI улеснява използването на менютата му (може да се използва в Windows, но не се препоръчва да го правите в нормален режим, а в режим на команден ред, така че win32 да не бойкотира вашия скрипт).

  4.   Карпър каза той

    Много готин урок. Но между другото, изходният код на python не е компилиран, той е интерпретиран език.

    1.    Гискард каза той

      Може да се компилира в псевдо код. Не машинният език, а байтовете представляват нещо за интерпретатора, но процесът се нарича и компилиран. В този смисъл е възможно да се каже, че нещо е съставено.

  5.   hty каза той

    Може би е по-добре да научите pytgk2, защото най-новата версия, достъпна за Windows, е 2.24. Серия 3 е забележима с отсъствието си. И лошите езици казват, че gnome разбива всички apis във всяка нова версия.

    1.    марианогаудикс каза той

      Програмирам макет с GTK 3.4 / 3.6 и истината е, че те разбиват търпението и главата ви, трябва да пренапишете кода, сега разбирам защо хората от Linux Mint се оплакват от GTK и проекта GNOME.
      На тези от MINT съм съгласен с GTK 2.4 това не се случи.

  6.   Карлос каза той

    Добър урок и препоръки.
    Само подробности, тъй като е въведен код, в Python отстъпите са задължителни и трябва да се спазват в примерния код.

    Поздрави!

    1.    марианогаудикс каза той

      Можете ли да обясните от какво се състоят задължителните идентификации в Python? Казвам ви истината, никога не съм чувал това.Зловно съм свикнал с форумите на PyGTK 2/3 на английски и може би го пренебрегвам.

      1.    Гискард каза той

        В Python не използвате ключове както в C или блокове за начало / край, както в Pascal, но всичко се разбира чрез отстъпа, който давате на кода. Тоест, блоковете се разпознават чрез отстъп. Това е функция, която особено обичам. Избягвате да пишете ключове и подобни неща.

        1.    pandev92 каза той

          Просто не ми харесва, изглежда по-просто да поставите два малки клавиша или std :: endl;, отколкото да се вижда дали xd линията е добре таблична

          1.    Фелипе каза той

            : p Вашият учител по програмиране ще постави 0 вместо вас. Или по-лошо, ще ви уволнят от работата. Най-важното е, че кодът е четим с всичко, което предполага

          2.    pandev92 каза той

            завършващи със затварящи скоби, това ме прави много по-четлив XD ..

          3.    Гискард каза той

            Сериозно???


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            Ще видиш? Без вдлъбнатини не се разбира много добре. И това е лесно. С по-сложен, само компилаторът го разбира. Работата е там, че тъй като ТРЯБВА да отстъпите така или иначе (за да разберат хората кода), защо би бил излишен и да използвате разделители? Стига с вдлъбнатини и толкова.

          4.    pandev92 каза той

            Разбира се, нищо не се разбира, защото не спазвате правилата за добро писане на програма в c / c ++. Това, което сте направили, е валидно за каквото и да е, като влагане на функция, във функция вътре в друга функция, която е вътре в друга, тогава искам да ви видя xd, ако сте в състояние да го разберете.

          5.    pandev92 каза той

            между другото, с два вида този код е лесно разбираем xD

          6.    Гискард каза той

            Това, което направих, направих нарочно, за да ви покажа, че без отстъп, въпреки че се компилира, е изключително трудно да се разбере какъвто и да е код. Така че имате 2 правила: Отстъп и обхват с разделители. Но това е излишно. В Python такъв код просто не се приема от интерпретатора. И вие имате само едно правило: отстъп. Лесно.
            Хей, всеки с вкуса си.

          7.    Атей каза той

            И двете са добри, с отстъпи и без отстъпи, според мен предпочитам стила с точка и запетая или рубин, подобно на python, но отстъпът не е необходим.

            Това се разбира по-добре: P:

            echo 'int main (int argc, char * argv []) {program_name = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {превключвател (argv [ 1] [1]) {случай 'v': подробен = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; по подразбиране: fprintf (stderr, »Лоша опция % s \ n », argv [1]); use ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Поздрави 😀

      2.    Гискард каза той

        Мисля, че Карлос означава, че там, където кодът излезе, няма отстъпи. Това с copy & paste просто няма да работи. Не знам дали тагът съществува при създаването на публикация за да въведете езиков код. Би било добре, ако го сложат, ако не съществува.

        1.    Гискард каза той

          Вече видях какъв е проблемът: CODE Tag премахва всички интервали и раздели (не бива да прави това !!!) Но ако поставите nbsp върху него, тогава кодът изглежда добре. A0 в шестнадесетичен (160 в дек), въпреки че мисля, че може да зависи от шрифта (не знам). Ако се използва, то излиза така:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          Това в моите тестове изглежда добре, но нямам предварителен преглед, когато публикувам отговори (а трябва да има такива !!!) Ако не излезе, не е моя вина 😉

          1.    марианогаудикс каза той

            Погледнете примерите, които Себастиан Пелстерл дава в своя урок за PyGTK 3, Себастиан не поставя етикети.

            Пример:

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            можете да видите целия урок на Себастиан.

          2.    Гискард каза той

            Не знам какво искаш да кажеш. Това, което казвам, е, че тук, в публикациите, не е възможно да се използва HTML етикет «CODE», така че това, което поставяте като код, и да излезе добре с отстъп. На страницата, която препращате, ако видите източниците на страницата, ще видите, че тя не използва CODE, а използва други HTML разделители.
            Това не е против кода, който сте въвели, а по-скоро посочва недостатък в системата за публикуване на този сайт. Което може би администраторите могат да поправят.
            Когато говоря за тагове, очевидно говоря за HTML, а не за Python. Във всеки случай, ако поставите код без отстъп в Python, той просто няма да работи. Ако дойде новак и копира кода, както се появява в тази публикация, и се опита да го стартира, той няма да успее. Може да сте разочаровани, тъй като сте начинаещ. Отново вината не е ваша; и в моя непосредствен предишен отговор това, което направих, беше да дам начин за решаване на проблема от ниво потребител-кой-публикува.

          3.    марианогаудикс каза той

            Абсолютно си прав, трябваше да кача снимки, вместо да копирам кода.
            за да покаже как инструкциите са правилно подредени в PyGTK 3.

  7.   Фелипе каза той

    За да програмирате с python, препоръчвам да използвате Eclipse с приставката PyDev или Pychar m

  8.   Луикс каза той

    Както беше коментирано по-горе, точно затова не харесвам python, поради проблема с вдлъбнатините. Както видяхме, копирането и поставянето няма да работи, което не се случва с други езици като C, Java, PHP и т.н.

    Нещата за четливост, ние прилагаме разкрасител на код (като http://indentcode.net/ ) и готов,

    Грозното е фиксирано, но ако няма отстъп и логиката е променена, звучим ..

  9.   Карлос каза той

    Аз съм нов в PyGTK, възможно ли е да взаимодействам със скриптове на черупки на този език?

    1.    Здравей каза той

      Благодаря за урока.

      Поздрави.