Tạo ứng dụng (Vala + GTK 3) [phần 3]

Trong phần này, chúng ta sẽ xem cách tạo một cửa sổ khác và thiết kế nó với GTK. Chúng ta cũng sẽ thấy một số chức năng như thêm câu hỏi và sử dụng ba nút (50%, đóng băng và vượt qua).

ToolBar và ToolButton

Tạo thanh công cụ:

ứng dụng2

Tạo ToolButton, trong trường hợp này chúng tôi sẽ đặt một biểu tượng (bạn có thể tìm thấy nhiều biểu tượng theo mặc định đây) với «from_stock (Gtk.Stock.IconName):

Chụp từ 2013-12-07 23:26:52

Chúng ta có thể thấy rằng trong ứng dụng của mình, chúng ta có một thanh với hai nút ở trên cùng, nơi chúng ta sẽ sử dụng nút đầu tiên để tạo câu hỏi mới và nút thứ hai để nhập câu hỏi (thông qua tệp):

Chụp từ 2013-11-08 00:30:32

Tạo câu hỏi:
Nút mà chúng tôi đã tạo trước đó (trong thanh công cụ) khi chúng tôi nhấp vào nó, chúng tôi sẽ mở một cửa sổ gtk mới cho phép chúng tôi thêm câu hỏi vào cơ sở dữ liệu của mình:

ứng dụng1

Để tạo một cửa sổ mới, chúng ta sẽ tạo một lớp mới, mà chúng ta sẽ gọi là Câu hỏi và cách lớp Ứng dụng của chúng ta sẽ tạo một cửa sổ mới (this.window = new Gtk.Window ();)

Chúng tôi sẽ sử dụng một vài thành phần để tạo giao diện đồ họa theo thứ tự;

-Label (Câu hỏi)

- Entry (nơi chúng tôi sẽ viết câu hỏi)

-Label (phản hồi)

- 4 ô ngang sẽ chứa một Mục nhập (câu trả lời) và một Chuyển đổi (để chọn xem nó có đúng hay không)

-Button (để hoàn thành)

Chúng ta có thể thấy nó trông như thế nào:

Chụp từ 2013-12-08 01:07:08

Để lưu câu hỏi, chúng ta sẽ phải lấy văn bản của các mục nhập, chúng được lấy bằng get_text () trả về một chuỗi.

ứng dụng5

Để biết liệu Switch có hoạt động hay không, chúng ta có thể sử dụng phương pháp của nó get_active () trả về true nếu nó đang bật và flase nếu nó tắt.

 50%, nút Freeze và Pass:

 -năm mươi% :

Đối với 50%, chúng tôi chỉ phải xem nút nào là đúng và loại bỏ 2 nút không đúng, trong trường hợp này chúng tôi hủy chúng bằng set_sensitive (false).

ứng dụng4

Kết quả:

ứng dụng6

-Đông cứng:

Chúng tôi đặt lại thanh về 0.

this.time_bar.set_fraction (0);

-Vượt qua:

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

 Phần tiếp theo (4):

Trong phần tiếp theo, chúng ta sẽ xem cách cải thiện các khía cạnh của ứng dụng, chẳng hạn như các câu hỏi không phải lúc nào cũng xuất hiện ở cùng một vị trí, đặt một biểu tượng trên ứng dụng ...


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   f3niX dijo

    Tôi thích câu trả lời ... haha ​​.. Xin chào

  2.   bệnh panchomora dijo

    Những bài viết này rất hay về vala .. Tôi hy vọng những người khác .. lời chào

  3.   cr0t0 dijo

    Tôi đang chờ bài viết của bạn về Vala, tôi hy vọng sẽ có nhiều chuyến hàng. Chúc mừng!

  4.   pptru dijo

    Bài viết hay, cảm ơn vì đã chia sẻ.

  5.   Hiram dijo

    Xin chào,

    Tôi đã theo dõi các mục nhập trước của bạn để tạo ứng dụng này, vấn đề xảy ra bây giờ là tôi cố gắng truy cập các mục nhập của cửa sổ mới, tôi thực hiện theo cách này, trong phương thức saveC của lớp createQuestions (lớp tạo cửa sổ) .

    public void saveC () {
    string str = questionE.get_text ();
    stdout.printf ("Hiệp ước% s \ n", str);
    }

    Nhưng trên đầu ra, tôi nhận được điều này:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: khẳng định `GTK_IS_ENTRY (entry) 'không thành công

    Hiệp ước (vô hiệu)

    Tôi đã thấy một số ví dụ và trong định nghĩa của các phương thức truy cập các mục nhập, chúng thực hiện một số việc như sau:

    void on_activate (Mục nhập Gtk.Entry) {
    tên = entry.get_text();
    print ("\ nXin chào" + tên + "! \ n \ n");
    }

    Nhưng họ chỉ có một mục và trong ví dụ này có 5, vì vậy đến đây tôi đã bị lạc, bạn có thể hướng dẫn tôi tốt hơn.

    1.    lolbimbo dijo

      Vâng, khi bạn tạo các mục nhập, bạn không đặt tên cho chúng giống nhau, để nhận được văn bản chúng phải làm như sau:

      r1 = entry1.get_text();
      r2 = entry2.get_text();
      r3 = entry3.get_text();
      r4 = entry4.get_text();

      Nếu bạn muốn, hãy đặt một thùng dán và tôi sẽ xem xét nó

      1.    Hiram dijo

        lolbimbo nếu thực tế tôi có chúng với các tên khác nhau, nhưng tôi chỉ sử dụng một tên cho các bài kiểm tra vì không có tên nào trong số chúng trả lại văn bản mà tôi đã đặt trong mục nhập, nó sẽ gửi cho tôi lỗi được đề cập ở trên:

        Nhưng trên đầu ra, tôi nhận được điều này:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: khẳng định `GTK_IS_ENTRY (entry) 'không thành công

        Hiệp ước (vô hiệu)

        Tôi vẫn đang điều tra ...

        Chúc mừng. !!

      2.    Hiram dijo

        Sẵn sàng ở đây là nguồn, lời chào.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo dijo

      Xin chào Hiram, xem này, tôi sẽ cho bạn biết bạn phải làm như thế nào để giải quyết nó, điều đầu tiên xảy ra vì chúng tôi đang tạo một cửa sổ mới (nó không phải là cửa sổ chính) và khi gọi mục nhập, (xin lỗi vì các từ) Tôi không biết tại sao That shit không trả lại như thể nó là một mục nhập mà là một Widget, nhưng này, để giải quyết nó, bạn chỉ cần thay đổi tất cả các thành phần tĩnh mà bạn đã tạo thành động bằng cách sử dụng var:

      var questionE = new Gtk.Entry ();

      thì hàm sẽ hoạt động và bạn sẽ nhận được văn bản bên trong mục nhập.

      save.clicked.connect (() => {
      // string str = this.questionE.get_text ();
      stdout.printf ("Hiệp ước% s \ n", askE.get_text ());
      });

      Cuối cùng, đừng quên thay đổi dòng nơi bạn thêm mục nhập để hiển thị:

      askE.show ();

      Tôi để lại cho bạn mã hoàn chỉnh kèm theo sửa đổi để bạn có thể kiểm tra xem nó đã hoạt động chưa, đó là nếu bạn phải thay đổi tất cả các yếu tố (ít nhất là các mục) để tiếp tục với ứng dụng.

      http://paste.desdelinux.net/5048

      Liên quan

      1.    Hiram dijo

        Chale, lại làm phiền ở đây, tôi tiếp tục gặp sự cố, mã bạn hiển thị cho tôi là ổn, chỉ có điều gì đó xảy ra trong trường hợp:

        save.clicked.connect (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Hiệp ước% s \ n", askE.get_text ());
        });

        Nó nằm trong lớp Câu hỏi và nó hoạt động tốt nhưng khi muốn nhập từ saveC, nó không biên dịch, nó ném cho tôi lỗi này:

        bu01.vala: 50.38-50.50: error: Đối số 1: Không thể chuyển đổi từ `Question.saveC 'thành` Gtk.Button.clicked'
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: warning: Gtk.Stock không được dùng nữa kể từ ngày 3.10
        bu01.vala: 260.59-260.67: warning: Gtk.Stock không được dùng nữa kể từ ngày 3.10
        Biên dịch không thành công: 1 lỗi, 2 cảnh báo

        Tôi muốn nghĩ rằng đó là do cách tôi truyền tham số khi sự kiện nhấp chuột xảy ra:
        this.guardar.clicked.connect (this.guardarC);

        Cảm ơn trước vì phản hồi; ở đây tôi để lại mã gây ra lỗi: http://pastebin.com/pLzExhrb

      2.    lolbimbo dijo

        Tôi chưa thử nghiệm nó nhưng tôi nghĩ rằng việc xóa đối số khỏi hàm sẽ vứt bỏ nó.

        public void saveC (Gtk.Entry askE) {
        string str = questionE.get_text ();
        stdout.printf ("Hiệp ước% s \ n", str);
        }

        a:
        public void saveC () {
        string str = questionE.get_text ();
        stdout.printf ("Hiệp ước% s \ n", str);
        }

      3.    Hiram dijo

        lolbimbo, tôi đã thử xóa đối số và nó vẫn không hoạt động,

        Tôi vẫn đang cố gắng tìm hiểu vấn đề, tôi mới làm quen với Vala và không tìm được nhiều tài liệu, mong sớm tìm ra lời giải hoặc đợi các bạn ra mắt phần XNUMX xD.

        Tôi tiếp tục cố gắng ...

        Chúc mừng.