Rysowanie po Canvas-ie w tkinter

Stronę tą wyświetlono już: 347 razy

Metody dodające obiekty graficzne do Canvas-u

Kontrolka Canvas udostępnia następujący zestaw metod, umożliwiających dodawanie obiektów graficznych, które będą rysowane:

  • create_arc - rysowanie łuku, przykład:

    Listing 1
    1. arc_id = canvas.create_arc((0, 0, 50, 25), start = 20, extend = 30, style = tk.ARC)

    gdzie:

    • (0, 0, 50, 25) - krotka opisująca prostokąt, w którym pełna elipsa się mieści;
    • start - kąt początkowy podany w stopniach;
    • extend - kąt rysowanego łuku;
    • style - sposób rysowania: PIESLICE - jako wyciek, CHORD - ścinek lub ARC - łuk. Domyślna wartość to PIESLICE.
  • create_bitmap - dodaje dwukolorową (monochromatyczną) bitmapę;

  • create_image - dodaje obraz rysowany na canvas-ie, przykład:

    Listing 2
    1. img = tk.PhotoImage(file = "file.gif")
    2. image_id = canvas.create_image((0, 0), image = img)

    gdzie:

    • (0, 0) - współrzędne punktu zaczepienia bitmapy;
    • image - obiekt typu BitmapImage lub PhotoImage
  • create_line - rysowanie linii, przykład:

    Listing 3
    1. line_id = canvas.create_line((10, 20, 100, 200), fill = "#ff0000", width = 10)

    gdzie:

    • (10, 20, 100, 200) - współrzędne początku i końca linii;
    • fill - kolor linii;
    • width - grubość linii w px
  • create_oval - tworzy elipsę lub koło, przykład:

    Listing 4
    1. ellipse_id = canvas.create_oval((0, 0, 50, 25), fill = "#ff0000", outline = "#00ff00", width = 2)

    gdzie:

    • (0, 0, 50, 25) - współrzędne lewego górnego i prawego dolnego wierzchołka prostokąta, w który elipsa jest wpisana;
    • fill - kolor wypełnienia;
    • outline - kolor linii obramowania;
    • width - grubość linii obramowania
  • create_polygon - tworzy wielokąt, przykład:

    Listing 5
    1. polygon_id = canvas.create_polygon((0, 0, 10, 0, 0, 10), fill = "#ff0000", outline = "#00ff00", width = 2)

    gdzie:

    • (0, 0, 10, 0, 0, 10) - współrzędne wierzchołków wielokąta;
    • fill - kolor wypełnienia wielokąta;
    • outline - kolor linii obramowania wielokąta;
    • width - grubość linii obramowania
  • create_rectangle - tworzy prostokąt, przykład:

    Listing 6
    1. rectangle_id = canvas.create_rectangle((0, 0, 10, 0, 0, 10), fill = "#ff0000", outline = "#00ff00", width = 2)

    gdzie:

    • (0, 0, 50, 25) - współrzędne lewego górnego i prawego dolnego wierzchołka prostokąta;
    • fill - kolor wypełnienia;
    • outline - kolor linii obramowania;
    • width - grubość linii obramowania
  • create_text - tworzy obiekt tekstowy, przykład:

    Listing 7
    1. text_id = canvas.create_text((50, 50), text = "tekst do wypisania", anchor = tk.N, fill = "#ff0000", font = ("Times new roman", 20))

    gdzie:

    • (50, 50) - współrzędne kotwicy tekstu;
    • anchor - steruje położeniem tekstu względem kotwicy (punktu jego zaczepienia). Dostępne opcje to CENTER (domyślne); N (north); NW (north-west); SW (south-west); S (south); SE (south-east) lub NE (north-east);
    • fill - kolor czcionki;
    • font - krotka opisująca czcionkę i jej rozmiar;

Dostęp do obiektów canvas-u

Każda z wyżej wymienionych metod zwraca identyfikator obiektu, po którym można się do niego odwoływać.

Pozyskiwanie i modyfikowanie informacji o koordynatach (współrzędnych) opisujących dany obiekt

W celu dorwania się do danych opisujących dany obiekt należy posłużyć się metodą coords, która przyjmuje jeden obowiązkowy argument będący identyfikatorem danego obiektu. Gdy jako drugi argument tej funkcji nie zostanie podana lista opisująca nowe koordynaty, metoda ta zwraca bieżące koordynaty obiektu:

Listing 8
  1. rectangle_id = canvas.create_rectangle((0,0,10,20))
  2. coords = canvas.coords(rectangle_id) # pobieranie koordynatów
  3. canvas.coords(rectange_id, (coords[0] + 5, coords[1] + 10, coords[2] + 20, coords[3] + 40)) # zmiana koordynatów

Dostęp i zmiana właściwości obiektu

Każdy obiekt ma swoje właściwości, które są ustawiane w trakcie ich tworzenia. Dzięki metodzie itemconfig można uzyskać dostęp do słownika zawierającego wszystkie opcje, lub zmienić ustawienia wybranej opcji. Oto przykład:

Listing 9
  1. rectangle_id = canvas.create_rectangle((0,0,10,20))
  2. options = canvas.itemconfig(rectangle_id) # zwraca słownik zawierający wszystkie ustawienia danego obiektu
  3. canvas.itemconfig(rectangle_id, width = 2, fill = "#ff0000", outline = "#00ff00") # zmiana szerokości linii obramowania, koloru wypełnienia i obramowania

Usuwanie obiektu z canvas-u za pomocą metody delete

Usuwanie wszystkich elementów dodanych do canvasu:

Listing 10
  1. canvas.delete(tk.ALL)

Usunięcie danego obiektu wymaga podanie na wejście identyfikatora obiektu:

Listing 11
  1. id1, id2 = canvas.create_rectangle((0,0,100,100)), canvas.create_rectangle((20,30,100,200))
  2. canvas.delete(id1, id2) # usuwanie dwóch obiektów na raz

Pobieranie listy elementów

Pobieranie listy wszystkich elementów dodanych do canvasu za pomocą metody find_all

Listing 12
  1. list = canvas.find_all() # zwraca krotkę zawierającą identyfikatory obiektów w kolejności ich dodania

Pobieranie identyfikatora obiektu znajdującego się najbliżej danego punktu za pomocą metody find_closest

Metoda ta zwraca krotkę, zawierającą identyfikator najbliżej znajdującego się obiektu. Jeżeli na canvas-ie nie ma obiektów będzie błąd.

Listing 13
  1. objectid = canvas.find_closest(10,20)[0] # zwraca id obiektu znajdującego się najbliżej podanych współrzędnych

Pobieranie listy wszystkich elementów zawierających się całkowicie wewnątrz podanego prostokąta za pomocą metody find_enclosed

Listing 14
  1. items = canvas.find_enclosed( 20, 20, 125, 125) # zwraca krotkę identyfikatorów obiektów, jeżeli nie ma żadnego to krotka jest pusta

Pobieranie listy wszystkich elementów zawierających się częściowo wewnątrz podanego prostokąta za pomocą metody find_overlapping

Listing 15
  1. items = canvas.find_overlapping( 20, 20, 125, 125) # zwraca krotkę identyfikatorów obiektów, jeżeli nie ma żadnego to krotka jest pusta

Znajdowanie identyfikatora obiektu poniżej

Listing 16
  1. id = find_bellow(object_id)

Znajdowanie identyfikatora obiektu powyżej

Listing 17
  1. id = find_abowe(object_id)

Przemieszczanie obiektu za pomocą metody move

Listing 18
  1. rectangle_id = canvas.create_rectangle((0,0,10,10))
  2. canvas.move(rectangle_id, 10, 10)

Komentarze