PyGTK 3: мини-руководство по графическому интерфейсу с Python + GTK + 3

Мы собираемся создать небольшую программу с PyGTK 3.0, которая также работает с PyGTK 3.4. Этот небольшой графический интерфейс научит вас, как разделить программу на два или более файлов.

Вы можете посетить учебник Себастьяна Пёльстерла по новому 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

from gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "Кнопка \" Open \ "была нажата" def on_close_clicked (self, button): print "Closing application" 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 ("clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("clicked", 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): print "Была нажата кнопка \" Открыть \ ""

Это функция, которая активируется в терминале, когда мы нажимаем кнопку открытия. Сигнал для его активации:

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

Это функция, которая активируется, когда мы нажимаем кнопку закрытия.

закройте программу, которую мы запускаем.

сигнал для его активации

self.button.connect ("clicked", self.on_close_clicked) из gi.repository import Gtk ### мы вызываем библиотеки PyGTK ### class 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 ####

Помещаем нашу программу в папку с названием simple в нашем случае на рабочем столе.

FERT

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

закрыто

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

увидеть картинку.

терминал

Теперь мы можем увидеть нашу небольшую программу или новый виджет, созданный с помощью библиотек PyGTK 3.

Это простое окно с двумя кнопками.

 

Без названия

 

Теперь мы разделим программу на три части, затем я оставлю код для трех файлов.

Первый файл gui.py

from gi.repository import Gtk from destroy import destroy from io import io class gui (destroy, io): 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 ("clicked", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

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

class io: def on_open_clicked (self, button): print "Была нажата кнопка \" Открыть \ ""

Третий файл destroy.py

из gi.repository import Gtk class destroy: def on_close_clicked (self, button): print "Закрытие приложения" Gtk.main_quit ()

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

простой

Чтобы скомпилировать три файла. Открываем папку с терминалом и просто кладем обратно в терминал

python gui.py

Изменения, внесенные в код gui.py

from destroy import destroy ### statement для импорта нашего файла destroy.py ### from io import io ### statement для импорта нашего файла io.py ### class gui (destroy, io): #### в класс main добавляем подклассы destroy и io ####

Вы можете видеть, что предложение

def on_open_clicked (self, button): print "Была нажата кнопка \" Открыть \ ""

Его нет в gui.py, он находится в файле io.py

Приговор

def on_close_clicked (self, button):

распечатать "Закрытие заявки"
Gtk.main_quit ()

он находится в файле destroy.py

Таким образом, мы можем разделить программу на множество файлов, находящихся в разных каталогах одновременно.

С другой стороны, 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.


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

33 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован.

*

*

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

  1.   Ротс87 сказал

    В kde я предпочитаю использовать kdevelop (я думаю, так он называется) для удобного создания графического интерфейса, но мне все еще трудно найти процессы, чтобы это произошло x вещь: '(

  2.   ST0RMT4IL. сказал

    Отлично подходит для тех из нас, кто использует Python: D!

    Привет!

  3.   Пабло сказал

    Здравствуйте, я слежу за этим сообществом в течение долгого времени, и я не очень уверен, впервые ли я комментирую или я уже делал это раньше 😀 (на самом деле я не очень люблю писать комментарии в Интернете). Дело в том, что я делаю это, чтобы оставить предложение для Elav и KZKG ^ Gaara в качестве администраторов, и я думаю, что было бы неплохо добавить плагин для раскраски синтаксиса сейчас, когда в последнее время я вижу больше сообщений с кодом на разных языках программирования. Я знаю, что существует довольно много плагинов, но я не пробовал ни одного, поскольку не являюсь пользователем wordpress, поэтому я оставляю вас думать о жизнеспособности запроса. Я пользуюсь этой возможностью, чтобы спросить остальных читателей, что они думают об этой идее, потому что я знаю, что есть люди, которые предпочитают читать код без каких-либо украшений. Я прошу прощения, если это уже было здесь прокомментировано и было отклонено по какой-то причине, так как я не помню, чтобы я видел какое-либо обсуждение по этому поводу.

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

      Правда в том, что я хотел бы иметь возможность раскрашивать синтаксис, чтобы выделить код языков программирования.
      Это поможет пользователям, которые хотят изучать языки программирования.

      Но я тоже доволен форумом, и мы можем обсуждать и учиться вместе.

      1.    элиотайм3000 сказал

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

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

          Элио, мы говорим о Worpress. Реализовано в блоге From Linux. В нем нет функции раскрашивания букв постов.

          1.    элиотайм3000 сказал

            Ой, простите.

        2.    пандев92 сказал

          Naaa emacs удобен для тех, у кого 84 пальца XD .., нормальных людей, textmate, sublimetext или notepad ++ xd

          1.    элиотайм3000 сказал

            Невероятно, если вы не научились печатать, что необходимо для правильной работы с GNU Emacs и его сочетаниями клавиш. Кроме того, его графический интерфейс позволяет легко использовать его меню (его можно использовать в 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, или блоки begin / end, как в Pascal, но все понимается через отступ, который вы даете коду. То есть блоки распознаются как имеющие отступ. Это функция, которая мне особенно нравится. Вы избегаете писать ключи и тому подобное.

        1.    пандев92 сказал

          Мне это просто не нравится, кажется, проще поставить две маленькие клавиши или std :: endl;, чем быть видимым, если строка xd хорошо табулирована

          1.    Felipe сказал

            : p Ваш учитель программирования поставит вам 0. Или того хуже, они уволят вас с работы. Важнее всего то, что код можно читать со всеми вытекающими

          2.    пандев92 сказал

            заканчивая закрывающими скобками, это делает меня более читаемым 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.    пандев92 сказал

            Конечно, ничего не понимается, потому что вы не соблюдаете правила хорошего написания программ на c / c ++. То, что вы сделали, действительно для чего угодно, например, для вложения функции в функцию внутри другой функции, которая находится внутри другой, тогда я хочу увидеть вас xd, если вы можете это понять.

          5.    пандев92 сказал

            кстати, на два взгляда этот код легко понять xD

          6.    Жискар сказал

            То, что я сделал, я сделал специально, чтобы показать вам, что без отступов, даже если он компилируется, очень трудно понять любой код. Итак, у вас есть 2 правила: отступ и заключить с помощью разделителей. Но это лишнее. В Python такой код просто не принимается интерпретатором. И у вас есть только одно правило: отступ. Легко.
            Но привет, у каждого свои вкусы.

          7.    Атейус сказал

            Оба хороши, с отступом и без отступа, на мой взгляд, я предпочитаю стиль точки с запятой или рубин, аналогичный python, но отступ не нужен.

            Это лучше понять: P:

            echo '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, »Плохая опция% 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);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Привет 😀

      2.    Жискар сказал

        Я думаю, что Карлос имеет в виду, что там, где выходит код, нет отступов. Это с копированием и вставкой просто не сработает. Я не знаю, существует ли тег при создании сообщения ввести код языка. Хорошо бы поставили, если его нет.

        1.    Жискар сказал

          Я уже видел, в чем проблема: тег CODE удаляет все пробелы и табуляции (он не должен этого делать !!!) Но если вы поместите на него 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.   Felipe сказал

    Для программирования на Python я рекомендую использовать Eclipse с плагином PyDev или Pychar m.

  8.   Луикс сказал

    Как упоминалось выше, поэтому мне не нравится Python из-за углублений. Как мы видели, копирование и вставка не работает, чего не происходит с другими языками, такими как C, Java, PHP и т. Д.

    Что касается читабельности, мы применяем средство, улучшающее код (например, http://indentcode.net/ ) и готово,

    Уродливое исправлено, но если нет отступов и логика изменена, мы звучим ..

  9.   Чарли сказал

    Я новичок в PyGTK, возможно ли взаимодействие со сценариями оболочки на этом языке?

    1.    Привет сказал

      Спасибо за руководство.

      Привет.