У цій частині ми побачимо, як створити ще одне вікно та оформити його за допомогою GTK. Ми також побачимо деякі функціональні можливості, такі як додавання запитань та використання трьох кнопок (50%, заморозити та пройти).
Панель інструментів та Панель інструментів
Створіть панель інструментів:
Створюючи ToolButton, у цьому випадку ми поставимо піктограму (ти за замовчуванням знайдеш багато піктограм тут) з «from_stock (Gtk.Stock.IconName):
Ми бачимо, що в нашому додатку у нас є панель із двома кнопками вгорі, де ми будемо використовувати першу для створення нових питань, а другу для імпортування питань (через файл):
Створення запитань:
Кнопка, яку ми створили раніше (на панелі інструментів) при натисканні на неї, відкриє нове вікно gtk, яке дозволить нам додавати запитання до нашої бази даних:
Для створення нового вікна ми створимо новий клас, який ми будемо називати питання, і як наш клас App створить нове вікно (this.window = new Gtk.Window ();)
Ми використаємо кілька компонентів для створення графічного інтерфейсу по порядку;
-Етикетка (Запитання)
- Вступ (де ми напишемо питання)
-Етикетка (відповіді)
- 4 горизонтальних поля, які будуть містити Запис (відповідь) та Перемикач (щоб вибрати, чи правильно)
-Кнопка (для заповнення)
Ми можемо побачити, як це виглядає:
Для збереження запитання нам доведеться отримати текст записів, вони отримуються за допомогою get_text (), який повертає рядок.
Щоб знати, чи активний комутатор, ми можемо використовувати його метод get_active (), яка повертає істину, якщо вона увімкнена, і спалахує, якщо вона вимкнена.
Кнопки 50%, Freeze і Pass:
-п'ятдесят%:
Для 50% нам залишається лише подивитися, яка правильна кнопка, і видалити 2 неправильних, у цьому випадку ми скасовуємо їх за допомогою set_sensitive (false).
Результат:
-Замерзання:
Ми знову встановили планку в 0.
this.timebar.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) {
ім'я = entry.get_text ();
print ("\ nПривіт" + ім'я + "! \ n \ n");
}
Але у них лише один запис, і в цьому прикладі їх 5, тож я вже загубився, ви могли б мене орієнтувати краще.
Що ж, коли ви створюєте записи, ви не присвоюєте їм однакове ім'я, щоб отримати текст, який вони мають:
r1 = entry1.get_text();
r2 = entry2.get_text();
r3 = entry3.get_text();
r4 = entry4.get_text();
Якщо хочете, покладіть пастебін, і я подивлюсь на нього
lolbimbo, якщо насправді вони у мене з різними іменами, але я використовую лише одне для тестів, оскільки жоден з них не повертає текст, який я вклав у запис, він надсилає мені помилку, згадану вище:
Але на виході я отримую таке:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: твердження `GTK_IS_ENTRY (запис) 'не вдалося
Договір (нульовий)
Я все ще розслідую ...
Ура. !!
Готовий ось джерело, вітаю.
http://pastebin.com/pZG8GbrY
Привіт, Хіраме, дивись, я скажу тобі, як ти повинен це зробити, щоб це вирішити, перше, що ми створюємо нове вікно (воно не є головним), і при виклику запису (вибачте за слова) я не знаю, чому Це лайно не повертається так, ніби це запис, а віджет, але ей, для його вирішення потрібно просто змінити всі створені статичні компоненти на динамічні за допомогою var:
var questionE = new 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 ());
});
Це всередині класу Питання, і це нормально, але коли ви хочете увійти з 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 запитуєE) {
рядок str = questionE.get_text ();
stdout.printf ("Договір% s \ n", str);
}
a:
public void saveC () {
рядок str = questionE.get_text ();
stdout.printf ("Договір% s \ n", str);
}
lolbimbo, я спробував видалити аргумент, але він все ще не працює,
Я все ще намагаюся зрозуміти проблему, я новачок у Валі, і я не можу знайти багато документації, сподіваюсь найближчим часом знайти рішення або почекати, поки ви випустите четверту частину xD.
Я продовжую намагатися ...
Привіт.