- Компиляция приложений gtk
- 26.08.2018
- how to compile gtk+ application for native windows (and not for X windows)?
- 1 Answer 1
- Setting up GTK for Windows
- MSYS2
- gvsbuild
- Using GTK from MSYS2 packages
- Installation
- Building and distributing your application
- Legal notes on distributing GTK with your application
- Руководство GTK# для начинающих
- Оглавление
- 1. Предисловие
- 1.1 Что такое GTK#?
- 2. Установка
- 2.1 Скачивание/Установка
- 2.2 Внутри библиотек GTK#
- 2.3 GTK# или Glade#
- 3. Первое GTK# приложение
- Шаг 1. Присядьте удобнее
- Шаг 2. Создание папок и файлов
- Шаг 3. Формирование кода
- Шаг 4. Добавление графического интерфейса GUI
- Шаг 5. Формирование окна
- Шаг 6. Добавление событий
- 4. Первое Glade# приложение
- Шаг 1. Что такое Glade#
- 4.1.1 Что такое glade файлы?
- 4.1.2 На что похожи файлы .glade?
- Шаг 2. Интеграция glade файлов с нашей программой
- 4.2.1 Как скомпилировать?
- Шаг 3. Как использовать Glade# в моем коде
- 4.4 Как обращаться к виджетам определенным в gui.glade
- 4.5 Как добавить событие
Компиляция приложений gtk
26.08.2018
Для разработки приложений с использованием библиотеки gtk нужно немного: установить пакет libgtk2.0-dev и должным образом отредактировать make файл вашего приложения. В принципе ничего сложного. Но я хотел бы подробнее остановиться на этой строчке, которую нужно добавить в make файл.
Полная строка компиляции вашего приложения должна выглядеть примерно так:
Здесь main.cpp — файл с иcходным кодом вашего приложения, main — имя исполняемого модуля.
Добавочная строка, заключенная в обратные апострофы — тот самый придаток, необходимый для компиляции приложения, использующего библиотеку gtk. Она приведена во всех книгах и руководствах по gtk, но практически нигде не дается ее расшифровка. Что она делает? Зачем нужна? Давайте разбираться.
Начнем с апострофов. Они нужны для изменения порядка выполнения операций. Сначала выполняется команда заключенная в них, а потом ее результат передается компилятору g++ при его вызове. Если бы строка была заключена в обычные кавычки, то она передавалась бы компилятору как есть. Разумеется, он не смог бы ее обработать и возникла бы ошибка. По сути обратные апострофы делают то же самое, что и конструкция $(). То есть, команда, приведенная ниже эквивалентна исходной
Но, поскольку эта строка прописывается в make файле, а утилита make иначе интерпретирует конструкцию $(), то второй вариант не используют. Результат работы строки, заключенной в обратные апострофы подставляется на место ее вызова. То есть итоговый вызов компилятора имеет вид:
С этим разобрались. Теперь посмотрим на то, что делает эта строка в обратных апострофах:
В ней вызывается утилита pkg-config. Она предназначена для сбора и должного оформления информации об используемой библиотеке (в нашем случае, gtk+-2.0). Работает это следующим образом. При установке библиотеки gtk+-2.0 (и не только ее) в специальный каталог помещается текстовый файл с расширением pc. В нем сохраняется список библиотек и заголовочных файлов, которые необходимы для компиляции вашего приложения. Наш файл gtk+-2.0.pc расположен в каталоге /usr/lib/x86_64-linux-gnu/pkgconfig/ (у вас он может отличаться) и имеет следующее содержание.
Утилита pkg-config берет этот файл, анализирует его содержимое и передает компилятору g++. Ключи —cflags и —libs указывают pkg-config какую информацию нужно извлекать из pc файла. А именно:
—cflags — выводить флаги препроцессора и компилятора;
how to compile gtk+ application for native windows (and not for X windows)?
I have managed to compile a gtk+ application with cygwin, but unfortunately with this approach, the application needs x windows running to be able to startup.
How can I compile my gtk+ application to run natively on windows.
I have seen various posts online about using the -mno-cygwin flag to gcc , but that seems to have been deprecated?
I have also seen these posts on stackoverflow, but its not clear if they are trying to compile for X, or natively for Windows:
1 Answer 1
The application needs to be compiled using MinGW and not Cygwin.
The full list of steps I followed:
2) Install MinGW to a folder without spaces, e.g. to c:\MinGW.
3) Download gtk+. Even though my machine is 64bit, I went for the 32 bit download of gtk+ because compatibility warnings on the 64bit download page. The GTK+ Win32 downloads are here. I went for the all-in-one version.
4) Extract gtk+ to a folder without spaces, e.g. c:\gtk
5) If you don’t already have an application, you can use the gtk+ hello world source code. Save this to a folder, e.g. c:\myapp\
6) Open a windows command prompt and cd to the folder in step 5. E.g.
7) In the command window, add your MinGW folder to the windows PATH, e.g.
c:\myapp> set PATH=c:\gtk\bin;%PATH%
8) In the command window, add your gtk+ folder to the windows PATH, e.g.
c:\myapp> set PATH=c:\gtk\bin;%PATH%
9) Create a script to compile your application, e.g.
Note that I had to give the full path to bash.exe. For some reason adding c:\MinGW\msys\1.0\bin to the PATH and just using bash.exe didn’t work for me.
10) compile your application with compile.bat, e.g.
12) execute your application, e.g.
EDIT:
For step 9, we are just creating a gcc command to compile gtk+ with the correct include and library option settings.
This is the contents of compile.bat that got generated for me:
Of which, the include options created by pkg-config —cflags gtk+-2.0 :
(note I have put in line breaks above to improve readability on stackoverflow)
Notice that pkg-config —cflags gtk+-2.0 has put the full path of my gtk+ include files (c:/DEV/gtk224/include/).
And the library options generated by pkg-config —libs gtk+-2.0 :
(note I have put in line breaks above to improve readability on stackoverflow)
Notice that pkg-config —libs gtk+-2.0 has put the full path of my gtk library folder (c:/DEV/gtk224/lib).
For more information on pkg-config see the GTK+ documentation
Setting up GTK for Windows
Note: These instructions are intended for developers wanting to create Windows applications based on GTK, not for end-users. On Windows, GTK applications are typically bundled with GTK already, so end-users do not need to worry about how to install GTK itself.
There are various methods to install GTK on Windows development machines.
MSYS2
This method is based on the packages provided by MSYS2, which provides a UNIX-like environment for Windows. Both of these repositories also provide packages for a large number of other useful open source libraries.
gvsbuild
This method provides scripts to build the GTK stack from source and outputs libraries and tools that can be consumed by Visual Studio or Meson based projects.
We assume that you are using Windows 7 or later. For older versions of Windows, you will need to do a custom build of older versions of GLib and GTK.
Using GTK from MSYS2 packages
Installation
The MSYS2 project provides a UNIX-like development environment for Windows. It provides packages for many software applications and libraries, including the GTK stack. If you prefer developing using Visual Studio, you should use gvsbuild instead.
In MSYS2 packages are installed using the pacman package manager.
Note: in the following steps, we will assume you’re using a 64-bit Windows . Therefore, the package names include the x86_64 architecture identifier. If you’re using a 32-bit Windows, please adapt the instructions below using the i686 architecture identifier.
Step 1.: Download the MSYS2 installer that matches your platform and follow the installation instructions.
Step 2.: Install GTK3 and its dependencies. Open a MSYS2 shell, and run:
Step 3. (recommended): Install the GTK core applications. Glade is a GUI designer for GTK. It lets you design your GUI and export it in XML format. You can then import your GUI from your code using the GtkBuilder API. Read the GtkBuilder section in the GTK manual for more information.
To install Glade:
Step 4. (optional): If you want to develop a GTK3 application in Python, you need to install the Python bindings.
If you develop in Python 3:
If you develop in Python 2:
Step 5. (optional): Install the build tools. If you want to develop a GTK3 application in other languages like C, C++, Fortran, etc, you’ll need a compiler like gcc and other development tools: pacman -S mingw-w64-x86_64-toolchain base-devel
Building and distributing your application
Once you have installed the GTK as above, you should have little problem compiling a GTK app. In order to run it successfully, you will also need a GTK theme. There is some old builtin support for a Windows theme in GTK, but that makes your app look like a Windows 7 app. It is better to get a Windows 10 theme, for instance the Windows 10 Transformation Pack.
Step 1. Copy the gtk-3.20 folder of that repository to a folder share/themes/Windows10/gtk-3.0/ in your installation folder.
Step 2. You also need to copy the icons from the Adwaita theme, which you can download from the GNOME sources.
Step 3. Perform the same steps for the hicolor icons, which are the mandatory fallback for icons not available in Adwaita.
Step 4. To make GTK pick up this theme, put a file settings.ini in etc/gtk-3.0 in your installation folder. This should contain
Step 5. To top it all off, run the glib-compile-schemas utility provided by GLib to generate the compiled settings schema in your installation folder:
Step 6. You can then zip up your installation folder, or use an installer generator to do that for you, and distribute the result.
You may use MSYS2 to build your GTK application and create an installer to distribute it. Your installer will need to ship your application build artifacts as well as GTK binaries and runtime dependencies.
Legal notes on distributing GTK with your application
You are welcome to redistribute GTK binaries, including applications that bundle them, on other web sites, CD-ROM, and other media. You don’t have to ask for permission. That’s one of the points of Free Software.
One important thing that the GNU licenses require is that you must also redistribute the source code on request. This usually means at least the gettext, GLib, GTK, Pango and ATK sources.
GTK is hosted by GNOME.
GTK is maintained by the GTK Team.
© 1997-2021, The GTK Team. All Rights Reserved.
Руководство GTK# для начинающих
Оглавление
1. Предисловие
Эта статья является руководством для начинающих GTK# программистов. Она поможет тем, кто никогда до этого не программировал графические пользовательские интрфейсы (далее GUI) при помощи GTK#. Программисты ранее знакомые с GTK+ API из опыта написания на других языках (C, C++, Perl, Python) так же найдут этот пассаж полезным, т.к. он объясняет основы процесса создания приложений на C# в среде Mono. Эта статья так же рассказывает об основах использования Glade и libglade как быстрого инструмента создания графического пользовательского интерфейса.
1.1 Что такое GTK#?
Проще говоря, gtk# — это обертка над gtk+, кроссплатформенным GUI фреймворком.
gtk+ — это мультиплатформенный тулкит для создания GUI. Предоставляя полный набор виждетов, gtk+ пригоден в различных проектах: от одноразовых игрушек до набора приложений уровня предприятия.
Сегодня gtk+ работает с любым X сервером, Direct Framebuffer’ом и производными в Microsoft Windows NT. Библиотека gtk+ известна от Linux, где она является базисом для построения виджетов рабочей среды GNOME. gtk+ включен практически во все дистрибутивы Linux, и стабильно работает под управлением Windows NT. (в 2000 работала нестабильно, если мне память не изменяет)
Портирование gtk+ на Mac OS X запланированно, но необходима заинтересованность других людей. Это зов к участию.
Одно из наиболее распространенных недоумений состоит в том, что GTK# требует Mono для работы. Это неверно. GTK# будет запускаться на любой .NET-совместимой среде. GTK# регулярно тестируется в MS .NET и Mono фреймворках, но также может быть запущена в любой полностью совместной среде. Это означает, что если Вы пишите приложение на GTK# и хотите запустить его в Windows, Вы можете развернуть проект только с GTK# с использованием среды MS, или развернуть его в среде Mono для Windows.
2. Установка
2.1 Скачивание/Установка
Первую вещь, которую необходимо сделать — это скачать GTK# и установить его.
Linux, MacOSX, FreeBSD и другие: Проверьте наличие требуемых пакетов gtk-sharp, mono в вашем дистрибутиве.
aptitude install mono gtk-sharp2
для Debian-based дистрибутивов.
В SuSE Linux выберите нужные пакеты в YaST. Если их нет в дистрибутиве, тогда ищите здесь(http://www.mono-project.com/Downloads) и загружайте. Если на mono-project.com нет пакетов для Вашей платформы, тогда Вам придется скомпилировать из исходников 😉
Windows: программируйте Windows.Forms, не хрен лезть в GTK =) [примечание автора]
2.2 Внутри библиотек GTK#
Компоненты GTK#
GTK# состоит из следующих сборок, каждая соответствует подобной библиотеке:
gtk-sharp (http://www.mono-project.com/monodoc/N:Gtk)
Связи тулкита gtk+ 2.x для создания GUI
glib-sharp (http://www.mono-project.com/monodoc/N:Glib)
Связи тулкита glib 2.x, которые обеспечивают низкоуровневое библиотеки ядра для gtk+ (не-GUI)
pango-sharp (http://www.mono-project.com/monodoc/N:Pango)
Связи Pango, высокоуровневая библиотека компоновки и рендеринга международных текстов
atk-sharp (http://www.mono-project.com/monodoc/N:Atk)
связи к atk фреймворку
gdk-sharp (http://www.mono-project.com/monodoc/N:Gdk)
низкоуровневый инструментарий для «рисования», используемый gtk+
glade-sharp (http://www.mono-project.com/monodoc/N:Glade)
Glade# позволяет Вам загружать интерфейсы Glade в программу. Это наиболее простой путь создания GTK# GUI.
art-sharp (http://www.mono-project.com/monodoc/N:Art)
библиотека для работы с векторной графикой и отрисовки
rsvg-sharp (http://www.mono-project.com/monodoc/N:Rsvg)
gtk-dotnet (http://www.mono-project.com/monodoc/N:Gtk.DotNet)
интеграция пространства имен Gtk# с System.Drawing
gnomevfs-sharp (http://www.mono-project.com/monodoc/N:GnomeVfs)
связи файлов, их MIME типов, изображений к методу обращения приложений GNOME’а к файловой системе
vte-sharp (http://www.mono-project.com/monodoc/N:Vte)
связи к терминальному эмулятору VTE
gconf-sharp (http://www.mono-project.com/monodoc/N:GConf)
Связи к системе хранения конфигураций в GNOME
gtkhtml-sharp (http://www.mono-project.com/monodoc/T:Gtk.HTML)
Связи к легковесному HTML виджету
Другие компоненты не включены в основной дистрибутив GTK#, но заслуживают упоминания, потому что имеют отношение к GTK#: Gecko#, Gtksourceview#, Gsf#, Guile#, Gst# и dbus#.
2.3 GTK# или Glade#
Когда люди начинают изучение Mono, они могут стоять на перепутье — какую библиотеку использовать: gtk# или glade#. Для этого Вам нужно понять что такое glade# и что такое gtk#. gtk# — это ядро для построения оконных и виджет систем. Glade# наследует GTK#, таким образом является подмножеством GTK# и является совместимой, но glade# автоматически компонует виджеты с сохраняет их как XML файл. XML компоновка GUI может быть сгенерирована при помощи Glade утилиты, студии дизайна WYSIWYG.
Для большинства окон Glade# — лучший выбор. Он экономит время за счет отсутствия необходимости написания программного кода для GUI и делает простым изменение интерфейса в будущем. Но возникает проблема в том, что Вам нужно от интерфейса, Glade# не может выполнять некоторые специфичные вещи (скрывать элементы, динамически загружать новые части, наследовать виджеты). Только опыт может Вам понять, что в конкретном случае лучше использовать.
Для быстрого ознакомления с Glade# Вы возможно захотете взглянуть на этот скринкаст(http://nat.org/demos/gtksharp.html) Ната Фридмана (Nat Friedman)(http://nat.org), в котором он создает простое графическое приложение всего за несколько минут.
3. Первое GTK# приложение
Шаг 1. Присядьте удобнее
Шаг 2. Создание папок и файлов
Для начала нам нужно создать новую директорию для маленького проекта. (Пользователи Windows: давайте не будем использовать пробелы в названии директории, чтобы избежать в дальнейшем головной боли).
Откройте shell (Если вы в Windows, откройте меню сПуск 🙂 далее Программы -> Mono 1.x.x -> Mono Command Prompt. Она автоматически установит нужные пути к mono библиотекам.) Перейдите в только что созданную директорию. Мы часто будем использовать консоль, поэтому оставьте ее запущенной.
Вернемся к делу. Откройте свой любимый редактор (MonoDevelop, vi, emacs, notepad и т.д.) и создайте новый пустой проект (если это возможно) или создайте новый пустой файл. Сохраните файл под именем «helloworld.cs».
Шаг 3. Формирование кода
Я надеюсь, что Вы уже знакомы с C#, и код написанный ниже не вызовет никаких проблем в понимании. Мы должны создать новый класс, использовать Gtk# и указать точку входа в нашу программу. Это будет выглядеть так:
Это должно выглядеть весьма знакомо для Вас. Только теперь мы можем воспользоваться компилятором. Сохраним исходный код, перейдем в консоль и построим проект:
Для тех кто пользовался csc компилятором в Windows параметр «-pkg:» может показаться незнакомым. Этого параметра не было в csc, потому что Mono пришел из мира Linux. Этот параметр позволяет указать на необходимость подключения пакета gtk-sharp-2.0. Т.е. система ищет файл «gtk-sharp-2.0.pc», который содержит данные о местоположении библиотеки для этого пакета (среди другой информации). Т.е. мы не должны вводить «-r:gtk-sharp-2.0.dll -r:atk-sharp-2.0.dll -r:pango-sharp-2.0.dll . » руками.
Шаг 4. Добавление графического интерфейса GUI
Теперь давайте вернемся обратно к нашему коду. Уберем оператор «Console.WriteLine». Первое, что мы сделаем — создадим новое окно. Проделаем это добавлением нового оператора new Window и блока приложения (для начала нити цикла main). Вот так:
Теперь скомпилируем исходный код так же как мы делали это раньше, и запустим программу
В итоге вы получите что-то вроде этого:
Не так уж и сложно, да?
Первая вещь, которую Вы могли заметить, это то, что в отличии от использования System.Windows.Forms мы не писали код для точной компоновки текста в окне. Например, мы не писали ‘myLabel.Left = 100’ или ‘myLabel.Width = 200’ или что-то подобное для размещения текстовой метки на форме, мы просто пишем ‘myWin.Add(. )’. И все это потому, что ‘Gtk.Window’ — это виджет, который наследуется от Bin, или одиночного виджета который размещен в контейнере Container.
Другая часть кода, которая могла Вас заинтересовать, это использование выражений «Application.Init()» и «Application.Run()». Если вы когда-либо ранее использовали System.Windows.Forms это аналогично использованию «Application.Run()» во многих случаях. Обычно, когда приложения заканчивает обработку любого кода в основном потоке, приложение останавливается. Команда «ShowAll()» не блокирует код и продолжает дальнейшее выполнение кода (вплоть до остановки). Команда «Application.Init()» говорит оболочке выполнения «слушать» сигналы поступающие от Gtk.Windows и в момент когда выполняется «Application.Run()» выполнение кода передается основному циклу сообщений. Это позволяет оставаться приложению запущенным до тех пор пока не будут закрыты все окна. Для большей информации смотрите информацию об объекте Application.
Шаг 5. Формирование окна
Возможно Вы захотите спросить себя «Как я смогу добавить новый виджет на окно, если оно может содержать только один виджет?» До этого мы говорили, что Window действительно может содержать в себе только один виджет, но виджет сам по себе может содержать в себе множество других виджетов. Некоторые из этих виджетов наследуются от контейнера Gtk.Box, а в некоторых случаях напрямую от контейнера. Контейнерный виджет Bin наследуется напрямую от виждета-контейнера, как и многие другие виджеты, но Bin может содержать в себе только один элемент управления.
Для того чтобы размещать большое количество виджетов в нашем окне, мы должны добавить на окно один из виджетов, который может содержать в себе другие виджеты. Существует множество виджетов, которые могут делать это, но мы затронем только некоторые простые: HBox(http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.HBox), VBox(http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.VBox) и возможно Table(http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.Table).
Шаг 6. Добавление событий
Все классы производные от ‘Widget (http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.Box)’ предоставляют следующие события:
- ButtonPressEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ButtonPressEvent)
- ButtonReleaseEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ButtonReleaseEvent)
- ScrollEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ScrollEvent)
- MotionNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.MotionNotifyEvent)
- DeleteEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.DeleteEvent)
- DestroyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.DestroyEvent)
- ExposeEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ExposeEvent)
- KeyPressEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.KeyPressEvent)
- KeyReleaseEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.KeyReleaseEvent)
- EnterNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.EnterNotifyEvent)
- LeaveNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.LeaveNotifyEvent)
- ConfigureEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ConfigureEvent)
- FocusInEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.FocusInEvent)
- FocusOutEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.FocusOutEvent)
- MapEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.MapEvent)
- UnmapEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.UnmapEvent)
- PropertyNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.PropertyNotifyEvent)
- SelectionClearEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.SelectionClearEvent)
- SelectionRequestEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.SelectionRequestEvent)
- SelectionNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.SelectionNotifyEvent)
- ProximityInEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ProximityInEvent)
- ProximityOutEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ProximityOutEvent)
- VisibilityNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.VisibilityNotifyEvent)
- ClientEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ClientEvent)
- NoExposeEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.NoExposeEvent)
- WindowStateEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.WindowStateEvent)
Многие их этих событий могут быть обработаны стандартным обработчиком событий. Например:
public static void HandlerMethod(object obj, EventArgs args)
Пример обработки событий нажатия на кнопку:
public static void ButtonPressHandler(object obj, ButtonPressEventArgs args)
ButtonPressEventArgs — это класс производный от EventArgs. Класс ButtonPressEventArgs, как и многие другие в gtk#, добавляет свойство Gtk.Event (или другое от Gtk.Event) к EventArgs.
- EventType.Nothing
- EventType.Delete
- EventType.Destroy
- EventType.Expose
- EventType.MotionNotify
- EventType.ButtonPress
- EventType.TwoButtonPress
- EventType.ThreeButtonPress
- EventType.ButtonRelease
- EventType.KeyPress
- EventType.KeyRelease
- EventType.EnterNotify
- EventType.LeaveNotify
- EventType.FocusChange
- EventType.Configure
- EventType.Map
- EventType.Unmap
- EventType.PropertyNotify
- EventType.SelectionClear
- EventType.SelectionRequest
- EventType.SelectionNotify
- EventType.ProximityIn
- EventType.ProximityOut
- EventType.DragEnter
- EventType.DragLeave
- EventType.DragMotion
- EventType.DragStatus
- EventType.DropStart
- EventType.DropFinished
- EventType.ClientEvent
- EventType.VisibilityNotify
- EventType.NoExpose
- EventType.Scroll
- EventType.WindowState
- EventType.Setting
Например, для использования события Gdk.Event мы можем использовать такой код:
В примере выше вы можете увидеть как обнаружить было ли одиночное нажатие мышкой или это был двойной клик.
4. Первое Glade# приложение
Шаг 1. Что такое Glade#
4.1.1 Что такое glade файлы?
4.1.2 На что похожи файлы .glade?
Файл .glade содержит в себе всю необходимую информацию для того, чтобы библиотека libglade могла воссоздать GUI.
Шаг 2. Интеграция glade файлов с нашей программой
В намерениях нашего примера мы предпологаем, что GUI был сохранен в файл gui.glade, который содержит описание окна window1, кнопки button1 и метки label1.
Нам нужно будет создать новый указатель на Gtk# и Glade#, а затем создать новый класс и точку входа, с которой начинается наша программа.
4.2.1 Как скомпилировать?
Теперь мы должны скомпилировать исходный файл glade.cs указывая пространство имен для glade, которое находится в библиотеке glade-sharp. Команда компиляции следующая:
$ mcs -pkg:glade-sharp -resource:gui.glade glade.cs
Коммандой mcs -pkg:glade-sharp мы создаем программу glade.exe, а опция -resource внедряет файл gui.glade в исполняемую программу.
Передавая null как первый параметр в конструктор Glade.XML, мы сообщаем библиотеке libglade загружать glade файл из ресурсов, как вариант использования конструктора, файл может быть загружен из файловой системы, что особенно полезно тогда, когда Вы не хотите перекомпилировать GUI приложение после каждого изменения .glade файла.
Если мы запускаем программу наш GUI может открыться, однако, нажимая на кнопки Вы не добьетесь эффекта, потому как мы не назначали событий виджету, определенному в gui.glade файле. Изучив следующую секцию Вы научитесь это делать.
Шаг 3. Как использовать Glade# в моем коде
4.4 Как обращаться к виджетам определенным в gui.glade
Для доступа к объектам, определенным в gui.glade файле, Вы должны знать имя объекта и его тип, и только тогда добавлять его в C# код. Делается это следующим образом (обратите внимание на оттрибут [Widget]):
Применяем это определение к нашему примеру как следует ниже в коде:
4.5 Как добавить событие
Для добавления событий Вам необходимо следовать примеру кода ниже. Вы также можете добавлять события из Glade.