В этой части мы увидим, как создать еще одно окно и спроектировать его с помощью GTK. Мы также увидим некоторые функции, такие как добавление вопросов и использование трех кнопок (50%, заморозить и пройти).
ToolBar и ToolButton
Создайте ToolBar:
Создавая ToolButton, в этом случае мы поместим иконку (по умолчанию вы можете найти много иконок здесь) с «from_stock (Gtk.Stock.IconName):
Мы видим, что в нашем приложении у нас есть панель с двумя кнопками вверху, где мы будем использовать первую для создания новых вопросов, а вторую для импорта вопросов (через файл):
Создание вопросов:
Кнопка, которую мы создали ранее (на панели инструментов), когда мы нажимаем на нее, мы откроем новое окно gtk, которое позволит нам добавлять вопросы в нашу базу данных:
Чтобы создать новое окно, мы создадим новый класс, который мы будем называть Вопросы, и как наш класс App создаст новое окно (this.window = new Gtk.Window ();)
Мы будем использовать несколько компонентов для создания графического интерфейса по порядку;
-Label (Вопросы)
- Запись (куда мы будем писать вопрос)
-Этикетка (ответы)
- 4 горизонтальных поля, которые будут содержать Entry (ответ) и Switch (чтобы выбрать, правильный ли он)
-Кнопка (для завершения)
Мы видим, как это выглядит:
Чтобы сохранить вопрос, нам нужно будет получить текст записей, они получаются с помощью get_text (), который возвращает строку.
Чтобы узнать, активен ли коммутатор, мы можем использовать его метод get_active (), которая возвращает истину, если она включена, и мигает, если она выключена.
Кнопки 50%, Freeze и Pass:
-пятьдесят% :
Для 50% нам нужно только посмотреть, какая кнопка правильная, и удалить 2 неправильных, в этом случае мы отменяем их с помощью set_sensitive (false).
Результат:
-Замораживание:
Снова устанавливаем полоску на 0.
this.time_bar.set_fraction (0);
-Проходить:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Следующая часть (4):
В следующей части мы увидим, как улучшить некоторые аспекты нашего приложения, например, чтобы вопросы не всегда располагались в одном и том же месте, поместите значок в приложение ...
Я люблю ответы ... ха-ха .. Приветствую
Очень хорошие эти статьи про вала .. надеюсь остальным .. привет
Жду вашей записи о Вале, надеюсь, доставок будет много. Ура!
Хорошая статья, спасибо, что поделились.
Привет,
Я следил за вашими предыдущими записями при создании этого приложения, проблема возникает сейчас, когда я пытаюсь получить доступ к записям нового окна, я делаю это таким образом, в методе saveC класса createQuestions (класс, который создает окно) .
public void saveC () {
строка str = questionE.get_text ();
stdout.printf ("Договор% s \ n", str);
}
Но на выходе получаю вот что:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: утверждение `GTK_IS_ENTRY (запись) 'не выполнено
Договор (недействительный)
Я видел несколько примеров, и в определении методов, которые обращаются к записям, они делают что-то вроде этого:
void on_activate (запись Gtk.Entry) {
имя = запись.get_text ();
print ("\ nHello" + name + "! \ n \ n");
}
Но у них только одна запись, а в этом примере их 5, так что я уже потерялся, вы могли бы помочь мне лучше.
Ну, когда вы создаете записи, вы не даете им одинаковое имя, чтобы получить текст, который у них есть, вы делаете:
r1 = запись1.get_text();
r2 = запись2.get_text();
r3 = запись3.get_text();
r4 = запись4.get_text();
Если хочешь, ставь пастебин и я посмотрю
lolbimbo, если на самом деле у меня есть они с разными именами, но я использую только один для тестов, поскольку ни один из них не возвращает текст, который я ввел в запись, он отправляет мне ошибку, упомянутую выше:
Но на выходе получаю вот что:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: утверждение `GTK_IS_ENTRY (запись) 'не выполнено
Договор (недействительный)
Я все еще расследую ...
Ура !!
Готов вот источник, привет.
http://pastebin.com/pZG8GbrY
Привет, Хирам, послушай, я расскажу тебе, как это нужно сделать, чтобы решить эту проблему, первое, что это происходит, потому что мы создаем новое окно (оно не является основным), и при вызове записи ( извините за слова) Я не знаю, почему Это дерьмо не возвращается, как если бы это была запись, а виджет, но эй, чтобы решить эту проблему, вам просто нужно изменить все статические компоненты, которые вы создали, на динамические, используя var:
var questionE = новый Gtk.Entry ();
тогда функция будет работать, и вы получите текст внутри записи.
save.clicked.connect (() => {
// строка str = this.questionE.get_text ();
stdout.printf ("Договор% s \ n", askE.get_text ());
});
Наконец, не забудьте изменить строку, в которой вы добавляете запись, чтобы показать ее:
askE.show ();
Я оставляю вам полный код с модификацией, чтобы вы могли убедиться, что он уже работает, то есть если вы должны изменить все элементы (по крайней мере, записи), чтобы продолжить работу с приложением.
http://paste.desdelinux.net/5048
привет
Чале, вот опять беспокойство, у меня все еще возникают проблемы, код, который вы мне показываете, в порядке, только что-то происходит в случае:
save.clicked.connect (() => {
// строка str = this.questionE.get_text ();
stdout.printf ("Договор% s \ n", askE.get_text ());
});
Он находится внутри класса Questions и отлично работает, но когда вы хотите войти из saveC, он не компилируется, он выдает мне эту ошибку:
bu01.vala: 50.38-50.50: ошибка: аргумент 1: невозможно преобразовать из `Questions.saveC 'в` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: предупреждение: Gtk.Stock устарел с 3.10
bu01.vala: 260.59-260.67: предупреждение: Gtk.Stock устарел с 3.10
Ошибка компиляции: 1 ошибка (и), 2 предупреждения (и)
Я хочу думать, что это из-за того, как я передаю параметр, когда происходит событие щелчка:
this.guardar.clicked.connect (this.guardarC);
Заранее благодарим вас за отзыв; здесь я оставляю код, который выдает ошибку: http://pastebin.com/pLzExhrb
Я не тестировал, но думаю, что удаление аргумента из функции отбросит его.
public void saveC (Gtk.Entry asksE) {
строка str = questionE.get_text ();
stdout.printf ("Договор% s \ n", str);
}
a:
public void saveC () {
строка str = questionE.get_text ();
stdout.printf ("Договор% s \ n", str);
}
lolbimbo, я попытался удалить аргумент, но он все еще не работает,
Я все еще пытаюсь понять проблему, я новичок в Vala и не могу найти много документации, я надеюсь найти решение в ближайшее время или подожду, пока вы выпустите четвертую часть xD.
Я продолжаю пытаться ...
Привет.