2014-11-17 13 views
6

Tôi đã tự mình học GTK3 và hiện đang bị kẹt trên Gtk.DrawingArea. Như với hầu hết các tiện ích và chức năng trong GTK, có vẻ như thiếu tài liệu và hướng dẫn cập nhật về điều này. Để tham khảo như những gì tôi đã tìm thấy (hy vọng điều này sẽ giúp một số nhân viên của Google mất khác), tài liệu tự động tạo ra lazka đã được nguồn lực tốt nhất của tôi:GTK3 Hướng dẫn vẽ diện tích dường như không tồn tại?

http://lazka.github.io/pgi-docs/Gtk-3.0/classes/index.html

Tuy nhiên trang khu vực bản vẽ không có phương pháp mô tả.

http://lazka.github.io/pgi-docs/Gtk-3.0/classes/DrawingArea.html

Điều này dẫn tôi để tin rằng tôi có một sự hiểu lầm cơ bản của GTK và widget này, nhưng tôi không thể tìm thấy bất cứ điều gì giải thích làm thế nào để làm việc với nó! Các hướng dẫn duy nhất tôi có thể tìm thấy là những, nhưng họ là tất cả cho các phiên bản cũ;

3 là tốt nhất của các hướng dẫn, nhưng tôi dường như không thể có được nó để làm việc trong GTK3, và trung thực nó khá tiên tiến. Một số điều cũng không được chấp nhận và các thay thế có vẻ khá khó hiểu và không rõ ràng cách chúng hoạt động với DrawingArea: http://lazka.github.io/pgi-docs/Gtk-3.0/classes/Widget.html#Gtk.Widget.set_style

Hướng dẫn chính thức không có phần nào và chưa được cập nhật đáng kể trong một thời gian dài thời gian:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/objects.html

https://github.com/sebp/PyGObject-Tutorial

câu hỏi của tôi bây giờ là liệu ai đó có thể giúp tôi hiểu làm thế nào để vẽ với Gtk.DrawingArea? Có hướng dẫn gtk3 ngoài kia không?

Mục tiêu của tôi tại thời điểm này là tự động vẽ điểm đen trên vùng vẽ dựa trên đầu ra của thuật toán và hiển thị kết quả. Tôi sẽ hiển thị mã của tôi nhưng tôi hầu như không có bất cứ điều gì.

+0

Lưu ý rằng 'GtkDrawingArea' thực sự không có bất kỳ phương pháp nào! Nó chỉ là một widget trống với tất cả các thuộc tính được thiết lập để bạn có thể vẽ nó trong tín hiệu 'draw'. – ptomato

+0

Thú vị! Tôi đã vật lộn với tín hiệu rút ra trong một thời gian, tôi nhận thấy khi tôi kết nối nó với một cuộc gọi lại (on_draw), tín hiệu sẽ bám vào và cuộc gọi lại hiệu quả trong một vòng lặp! Tôi làm việc xung quanh nó bằng cách bỏ chặn id trình xử lý khi tôi muốn nó, và sau đó chặn nó ở cuối cuộc gọi lại, nhưng tôi không nghĩ đó là cách chính xác để làm điều đó. Bạn có đọc thêm để tạo tín hiệu tùy chỉnh hoặc lời khuyên nào khác không? Bạn cũng sẽ biết một phương pháp trong cairo.context để viết một pixel đơn lẻ? Gần nhất tôi nhận được là tạo ra hình vuông rất nhỏ. – Swashy

+0

Tốt nhất bạn nên mở một câu hỏi mới nếu bạn có thêm câu hỏi để mọi người có cơ hội trả lời, nhưng - tín hiệu vẽ sẽ được phát ra mỗi lần tiện ích cần vẽ lại. (Sau khi một cái gì đó được rút ra, nó bị lãng quên, và vì vậy nếu một cửa sổ di chuyển trên đầu trang của nó sau đó bạn cần phải vẽ lại nó.) Và Cairo không xử lý pixel, vì vậy một hình vuông nhỏ có lẽ là chính xác, tùy thuộc vào những gì bạn đang cố gắng đạt được. – ptomato

Trả lời

7

Bạn về cơ bản kết nối với :: tín hiệu vẽ và vẽ trong trình xử lý bằng pycairo. Và sử dụng queue_draw/queue_draw_area() nếu bạn muốn vẽ lại.

Xem http://zetcode.com/gfx/pycairo/basicdrawing/ để biết ví dụ

+1

Whoa lazka mình! Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm. – Swashy

Các vấn đề liên quan