Membuat Aplikasi (Vala + GTK 3) [bagian ke-3]

Pada bagian ini kita akan melihat bagaimana membuat jendela lain dan mendesainnya dengan GTK. Kami juga akan melihat beberapa fungsi seperti menambahkan pertanyaan dan menggunakan tiga tombol (50%, diam dan lulus).

ToolBar dan ToolButton

Buat ToolBar:

app2

Membuat ToolButton, dalam hal ini kita akan meletakkan ikon (Anda dapat menemukan banyak ikon secara default di sini) dengan «from_stock (Gtk.Stock.IconName):

Tangkap dari 2013-12-07 23:26:52

Kita dapat melihat bahwa dalam aplikasi kita, kita memiliki bilah dengan dua tombol di bagian atas, di mana kita akan menggunakan yang pertama untuk membuat pertanyaan baru dan yang kedua untuk mengimpor pertanyaan (melalui file):

Tangkap dari 2013-11-08 00:30:32

Membuat pertanyaan:
Tombol yang kita buat sebelumnya (di toolbar) ketika kita mengkliknya, kita akan membuka jendela gtk baru yang akan memungkinkan kita untuk menambahkan pertanyaan ke database kita:

app1

Untuk membuat jendela baru kita akan membuat kelas baru, yang akan kita sebut Pertanyaan, dan bagaimana kelas App kita akan membuat jendela baru (this.window = new Gtk.Window ();)

Kami akan menggunakan beberapa komponen untuk membuat antarmuka grafis secara berurutan;

-Label (Pertanyaan)

- Masuk (di mana kita akan menulis pertanyaan)

-Label (tanggapan)

- 4 kotak horizontal yang akan berisi Entri (jawaban) dan Sakelar (untuk memilih apakah itu benar)

-Tombol (untuk menyelesaikan)

Kita bisa lihat tampilannya:

Tangkap dari 2013-12-08 01:07:08

Untuk menyimpan pertanyaan kita harus mendapatkan teks dari entri, mereka diperoleh dengan get_text () yang mengembalikan sebuah string.

app5

Untuk mengetahui apakah sebuah Switch aktif kita dapat menggunakan metodenya dapatkan_aktif () yang mengembalikan nilai true jika aktif dan flase jika nonaktif.

 50%, tombol Freeze dan Pass:

 -lima puluh%:

Untuk 50% kita hanya perlu melihat tombol mana yang benar dan menghapus 2 tombol yang salah, dalam hal ini kita membatalkannya dengan set_sensitive (false).

app4

Hasil:

app6

-Membekukan:

Kami mengatur bar ke 0 lagi.

this.timebar.set_fraction (0);

-Lulus:

button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});

 Bagian Selanjutnya (4):

Pada angsuran berikutnya kita akan melihat bagaimana meningkatkan aspek aplikasi kita, seperti pertanyaan tidak selalu muncul di posisi yang sama, letakkan ikon di aplikasi ...


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   f3niX dijo

    Saya suka jawabannya ... haha ​​.. Salam

  2.   panchomora.dll dijo

    Bagus sekali artikel tentang vala ini .. semoga yang lainnya .. salam kenal

  3.   cr0t0 dijo

    Saya telah menunggu entri Anda di Vala, saya harap akan ada banyak pengiriman. Bersulang!

  4.   pptru dijo

    Artikel bagus, terima kasih sudah berbagi.

  5.   Hiram dijo

    Halo,

    Saya telah mengikuti entri Anda sebelumnya untuk pembuatan aplikasi ini, masalahnya muncul sekarang ketika saya mencoba mengakses entri jendela baru, saya melakukannya dengan cara ini, dalam metode saveC kelas createQuestions (kelas yang menciptakan jendela).

    public void saveC () {
    string str = questionE.get_text ();
    stdout.printf ("Perjanjian% s \ n", str);
    }

    Tetapi pada keluaran saya mendapatkan ini:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: pernyataan `GTK_IS_ENTRY (entri) 'gagal

    Perjanjian (nol)

    Saya telah melihat beberapa contoh dan dalam definisi metode yang mengakses entri mereka melakukan sesuatu seperti ini:

    void on_activate (entri Gtk.Entry) {
    nama = entri.get_text();
    cetak ("\ nHalo" + nama + "! \ n \ n");
    }

    Tetapi mereka hanya memiliki satu entri dan dalam contoh ini ada 5, jadi di sini saya sudah tersesat, Anda bisa membimbing saya dengan lebih baik.

    1.    lobimbo dijo

      Nah, ketika Anda membuat entri, Anda tidak memberi mereka nama yang sama, untuk mendapatkan teks yang mereka miliki Anda lakukan:

      r1 = entri1.get_text();
      r2 = entri2.get_text();
      r3 = entri3.get_text();
      r4 = entri4.get_text();

      Jika Anda mau, taruh pastebin dan saya akan melihatnya

      1.    Hiram dijo

        lolbimbo jika sebenarnya saya memilikinya dengan nama yang berbeda, tetapi saya hanya menggunakan satu untuk tes karena tidak ada yang mengembalikan teks yang saya masukkan ke dalam entri, itu mengirimi saya kesalahan yang disebutkan di atas:

        Tetapi pada keluaran saya mendapatkan ini:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: pernyataan `GTK_IS_ENTRY (entri) 'gagal

        Perjanjian (nol)

        Saya masih menyelidiki ...

        Bersulang.!!

      2.    Hiram dijo

        Siap disini sumbernya, salam kenal.
        http://pastebin.com/pZG8GbrY

    2.    lobimbo dijo

      Hai Hiram, lihat, saya akan memberi tahu Anda bagaimana Anda harus melakukannya-untuk menyelesaikannya, hal pertama ini terjadi karena kita membuat jendela baru (ini bukan yang utama), dan ketika memanggil entri, ( maaf untuk kata-katanya) Saya tidak tahu mengapa omong kosong itu tidak kembali seolah-olah itu adalah entri tetapi Widget, tapi hei, untuk mengatasinya Anda hanya perlu mengubah semua komponen statis yang Anda buat menjadi dinamis menggunakan var:

      var questionE = new Gtk.Entry ();

      maka fungsinya akan bekerja dan Anda akan menerima teks di dalam entri.

      save.clicked.connect (() => {
      // string str = this.questionE.get_text ();
      stdout.printf ("Perjanjian% s \ n", askE.get_text ());
      });

      Terakhir, jangan lupa untuk mengubah baris tempat Anda menambahkan entri untuk menampilkannya:

      askE.show ();

      Saya meninggalkan Anda kode lengkap dengan modifikasi sehingga Anda dapat memeriksa bahwa itu sudah berfungsi, yaitu jika Anda harus mengubah semua elemen (setidaknya entri) untuk melanjutkan aplikasi.

      http://paste.desdelinux.net/5048

      salam

      1.    Hiram dijo

        Chale, di sini repot lagi, saya terus mengalami masalah, kode yang Anda tunjukkan baik-baik saja, hanya terjadi sesuatu dalam acara:

        save.clicked.connect (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Perjanjian% s \ n", askE.get_text ());
        });

        Itu ada di dalam kelas Pertanyaan dan berfungsi dengan baik tetapi ketika ingin masuk dari saveC, itu tidak dikompilasi, itu memberi saya kesalahan ini:

        bu01.vala: 50.38-50.50: error: Argument 1: Tidak dapat mengonversi dari `Questions.saveC 'ke` Gtk.Button.clicked'
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: peringatan: Gtk.Stock tidak digunakan lagi sejak 3.10
        bu01.vala: 260.59-260.67: peringatan: Gtk.Stock tidak digunakan lagi sejak 3.10
        Kompilasi gagal: 1 kesalahan, 2 peringatan

        Saya ingin berpikir bahwa ini karena cara saya meneruskan parameter saat peristiwa klik terjadi:
        this.guardar.clicked.connect (this.guardarC);

        Terima kasih sebelumnya atas umpan baliknya; di sini saya meninggalkan kode yang melempar kesalahan: http://pastebin.com/pLzExhrb

      2.    lobimbo dijo

        Saya belum mencobanya tetapi saya pikir menghapus argumen dari fungsi akan membuangnya.

        public void saveC (Gtk.Entry askE) {
        string str = questionE.get_text ();
        stdout.printf ("Perjanjian% s \ n", str);
        }

        a:
        public void saveC () {
        string str = questionE.get_text ();
        stdout.printf ("Perjanjian% s \ n", str);
        }

      3.    Hiram dijo

        lolbimbo, saya sudah mencoba menghapus argumen tersebut dan masih tidak berhasil,

        Saya masih mencoba memahami masalahnya, saya baru mengenal Vala dan saya tidak dapat menemukan banyak dokumentasi, saya berharap dapat menemukan solusinya segera atau menunggu Anda untuk merilis bagian keempat xD.

        Saya tetap mencoba ...

        Salam.