2014-11-17 9 views
6

Uczę się GTK3 na własną rękę i utknąłem na Gtk.DrawingArea. Podobnie jak w przypadku większości widżetów i funkcji w GTK, wydaje się, że brakuje zaktualizowanej dokumentacji i samouczków na ten temat. Dla porównania, co znalazłem (mam nadzieję, że to pomoże kilka innych zagubionych Googlersom), automatycznie wygenerowana dokumentacja lazka został moim najlepszym źródłem:Samouczek dotyczący obszaru rysowania GTK3 wydaje się nie istnieć?

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

Jednak strona obszar rysunku nie ma opisanych metod.

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

To prowadzi mnie do przypuszczenia, że ​​mam fundamentalne niezrozumienie GTK i ten widget, ale nie mogę znaleźć nic wyjaśniający w jaki sposób z nim pracować! Jedyne tutoriale, jakie mogłem znaleźć, to te, ale wszystkie są dla starszych wersji;

3 jest najlepszy z tych ćwiczeń, ale nie wydaje się uzyskać go do pracy w GTK3 i uczciwie jest dość zaawansowany. Kilka rzeczy są przestarzałe i zamienniki wydają się być dość tajemnicze i są niejasne, w jaki sposób pracować z DrawingArea: http://lazka.github.io/pgi-docs/Gtk-3.0/classes/Widget.html#Gtk.Widget.set_style

Oficjalny poradnik nie posiada sekcję na nim, a nie został znacząco aktualizowane w długi czas:

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

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

Moje pytanie brzmi, czy ktoś może mi pomóc zrozumieć, jak wyciągnąć z Gtk.DrawingArea? Czy jest tam samouczek gtk3?

Moim celem w tej chwili jest automatyczne narysowanie czarnych punktów w obszarze rysunku na podstawie wyników algorytmu i wyświetlenie wyników. Pokazałbym mój kod, ale ledwo co mam.

+0

Zauważ, że 'GtkDrawingArea' naprawdę nie ma żadnych metod! Jest to po prostu pusty widget z wszystkimi ustawionymi właściwościami, dzięki czemu można go narysować w sygnale 'draw'. – ptomato

+0

Interesujące! Przez pewien czas zmagałem się z sygnałem przyciągania, zauważyłem, że gdy podłączyłem go do wywołania zwrotnego (on_draw), sygnał będzie się utrzymywał, a wywołanie zwrotne było skutecznie w pętli! Pracowałem nad nim, odblokowując identyfikator handlerki, kiedy go chciałem, a następnie blokując go na końcu wywołania zwrotnego, ale nie sądzę, że jest to właściwy sposób. Czy masz dalsze informacje na temat tworzenia niestandardowych sygnałów lub jakiejkolwiek innej porady? Czy znasz również metodę w cairo.context do pisania pojedynczego piksela? Najbliżej było zrobić bardzo mały kwadrat. – Swashy

+0

Najlepiej jest otworzyć nowe pytanie, jeśli masz dodatkowe pytania, aby każdy miał szansę na odpowiedź, ale sygnał powinien być emitowany za każdym razem, gdy widget wymaga przerysowania. (Gdy coś zostanie narysowane, zostanie zapomniane, a więc jeśli inne okno przesunie się nad nim, musisz przerysować je.) A Kair nie zajmuje pikseli, więc mały kwadrat jest prawdopodobnie poprawny, w zależności od tego, co próbujesz osiągnąć. – ptomato

Odpowiedz

7

Po prostu łączysz się z sygnałem :: draw i rysujesz w programie obsługi używając pycairo. I użyj queue_draw/queue_draw_area(), jeśli chcesz przerysować.

http://zetcode.com/gfx/pycairo/basicdrawing/ Zobacz przykłady

+1

Sama lazka! Dzięki, właśnie tego szukałem. – Swashy