Podstawowe kontrolki w tkinter

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

Kontrolka Label

Kontrolka Label jest jedną z najprostszych kontrolek. Służy ona najczęściej do wyświetlania tekstu lub (rzadziej) elementów graficznych. Oto przykład utworzenia takiej kontrolki:

Listing 1
  1. import tkinter as tk # ładowanie modułu tkinter (w wersji 3+)
  2. window = tk.Tk() # tworzenie okna głównego
  3. window.title( "Hello World" ) # ustawienie tytułu okna głównego
  4. # tworzenie kontrolki typu label
  5. label = tk.Label( window, text = "Witaj Świecie programowania\nCo swym urokiem nas zabawia\nCo otwiera nowe możliwości\nZ binarnych liczb złożoności" )
  6. label.pack( side = tk.BOTTOM ) # podpinanie kontrolki pod okno
  7. tk.mainloop() # wywołanie pętli komunikatów

Konstruktor klasy Label może przyjmować następujące parametry:

Listing 2
  1. Label(window=None, **options)

Tworzy obiekt klasy kontrolki typu Label odpowiedzialnej za wyświetlanie tekstu lub obrazu, gdzie:

  • window - uchwyt okna głównego;
  • **options - opcje ustawień, które mogą zawierać:
    • activebackground kolor tła, gdy kontrolka jest aktywna, przykład:
      Listing 3
      1. label = tk.Label(window, activebackground = "#ff0000")
    • activeforeground kolor pierwszoplanowy, gdy kontrolka jest aktywna
    • anchor kontroluje, gdzie tekst kontrolki (lub obrazu) powinien być usytuowany. Użyj jako ustawienie N (north), NE (north-east), E (east), SE (side-east), S (side), SW (side-west), W (west), NW (north-west) lub CENTER;
    • background kolor tła
    • bg to samo co background
    • bitmap bitmapa wyświetlana w kontrolce, jeżeli opcja image jest ustawiona ta pozycja jest ignorowana;
    • borderwidth szerokość obramowania kontrolki;
    • bd to samo co borderwidth
    • compound kontroluje jak tekst i grafika są wyświetlane w kontrolce. Przy domyślnych ustawieniach, gdy opcja image lub bitmap są ustawione, wtedy grafika jest rysowana zamiast tekstu. Gdy opcja ta jest ustawiona na CENTER wtedy tekst jest rysowany nad grafiką. Gdy opcja ta jest ustawiona na BOTTOM, LEFT, RIGHT lub TOP tekst jest wyświetlany odpowiednio pod, po lewej, po prawej lub ponad grafiką. Domyślna wartość to NONE.
    • cursor określa jaki kursor będzie wyświetlany, gdy ten znajdzie się w obszarze kontrolki.
    • disabledforeground jaki kolor pierwszoplanowy ustawić, gdy kontrolka jest nieaktywna.
    • font czcionka, jakiej użyć do wyświetlania tekstu, przykład:
      Listing 4
      1. label = tk.Label(window, font = ("Times New Roman", 20)) # krój czcionki, rozmiar czcionki
    • foreground kolor czcionki
    • fg to samo co foreground
    • height wysokość kontrolki, gdy kontrolka wyświetla tekst używane są jednostki tekstu, natomiast w przypadku grafiki piksele. Gdy ten parametr jest ustawiony na zero to wysokość jest obliczana na podstawie zawartości.
    • highlightbackground kolor podświetlenia ramki, gdy kontrolka nie ma fokusa;
    • highlightcolor kolor podświetlenia ramki, gdy kontrolka ma fokus;
    • highlightthickness szerokość ramki podświetlenia. Domyślna wartość ustawiona jest na 0;
    • image obrazek do wyświetlenia, domyślnie wartość powinna być obiektem klasy PhotoImage lub ButmapImage lub odpowiadający im obiekt;
    • justify wyrównanie tekstu: LEFT, RIGHT lub CENTER;
    • padx dodatkowe przesunięcie w poziomie tekstu, domyślna wartość to 1;
    • pady dodatkowe przesunięcie w pionie tekstu. Domyślna wartość to 1;
    • relief rodzaj dekoracji obramowania. Ustawienie domyślne to FLAT, inne dostępne to SUNKEN, RAISED, GROOVE i RIDGE;
    • state definiuje sposób renderowania kontrolki. Domyślna ustawienie to NORMAL, inne dostępne wartości to ACTIVE i DISABLED
    • takefocus jeżeli ustawione na true to kontrolka akceptuje fokus, domyślnie ustawione na false;
    • text tekst do wyświetlenia;
    • textvariable połączone z zmiennymi tkinter (zazwyczaj StringVar). Gdy zmienna ulega zmianie, tekst w kontrolce się aktualizuje. Przykład:
      Listing 5
      1. variable = tk.StringVar();
      2. label = tk.Label(window, textvariable = variable)
      3. variable.set("Przykładowy tekst") # zmiana tekstu zmiennej variable wpłynie na tekst wyświetlany w kontrolce label
    • underline podkreślenie tekstu wyświetlanego, domyślnie wyłączone i ustawione na -1;
    • width szerokość kontrolki. Gdy wyświetlany jest tekst wtedy używane są jednostki związane z tekstem. W przypadku grafiki jednostkami są piksele. Domyślnie ustawione na zero co oznacza, że szerokość będzie obliczana na podstawie zawartości kontrolki.

Kontrolka tekstowa Entry i kontrolka przycisku Button

Kontrolka Entry służy do wczytywania jedno liniowego tekstu. Przykład użycia tejże kontrolki oraz kontrolki Button znajduje sie poniżej.

Listing 6
  1. import tkinter as tk # ładowanie modułu tkinter (w wersji 3+)
  2. window = tk.Tk() # tworzenie okna głównego
  3. window.title( "Hello World" ) # ustawienie tytułu okna głównego
  4. # tworzenie kontrolki typu label
  5. text = tk.StringVar()
  6. label = tk.Label( window, textvariable = text, padx=100, pady=20)
  7. label.pack() # podpinanie kontrolki pod okno
  8. text.set("Witaj Świecie programowania\nCo swym urokiem nas zabawia\nCo otwiera nowe możliwości\nZ binarnych liczb złożoności")
  9. description = tk.Label(window, text="Podaj proszę swoje imie:").pack()
  10. name = tk.Entry(window,width=40)
  11. name.pack()
  12. def HelloWorld():
  13. text.set("Witaj {0} w świecie programowania\nCo swym urokiem nas zabawia\nCo otwiera nowe możliwości\nZ binarnych liczb złożoności".format(name.get()))
  14. ok = tk.Button(window, text="OK", width=20, command=HelloWorld)
  15. ok.pack()
  16. tk.mainloop() # wywołanie pętli komunikatów

Opcje konstruktora klasy Entry

Konstruktor klasy Entry przyjmuje taką samą listę argumentów co klasy Label, jedynie opcje nieco się różnią:

  • background - kolor tła kontrolki;
  • bg - to samo co background;
  • borderwidth - szerokość obramowania;
  • bd - to samo co borderwidth;
  • cursor - określa typ kursora wyświetlanego, gdy myszka znajduje się nad obszarem kontrolki;
  • disabledbackground - tło, które będzie użyte gdy kontrolka jest nieaktywna.
  • disabledforeground - kolor tekstu, gdy kontrolka jest nieaktywna;
  • exportselection - gdy ustawione jest na True to zaznaczony tekst automatycznie jest kopiowany do systemowego schowka. Domyślnie wartość ta jest ustawiona na True;
  • font - czcionka wyświetlanego tekstu;
  • foreground - kolor tekstu;
  • fg - to samo co foreground
  • highlightbackground - razem z highlightBackground opcja ta kontroluje jak rysować podświetlenie ramki kontrolki, gdy nie ma fokusa.
  • highlightcolor - to samo co highlightbackground, z tą różnicą, że używa się tej opcji przy rysowaniu podświetlenia obramowania gdy kontrolka ma fokus;
  • highlightthickness - szerokość ramki podświetlania kontrolki;
  • insertbackground - kolor karetki wpisywania tekstu;
  • insertborderwidth - długość obramowania karetki wpisywania tekstu. Gdy ten parametr jest ustawiony na zero, używany jest styl RAISED;
  • insertofftime - razem z opcją insertontime kontroluje prędkość mrugania karetki wpisywania tekstu. Obie wartości są wyrażone w milisekundach;
  • insertontime - podobnie jak insertofftime, tylko że określa czas pojawiania się karetki kursora wpisywania tekstu;
  • insertwidth - długość karetki wpisywania tekstu wyrażona w pikselach.
  • justify - określa w jaki sposób tekst jest pozycjonowany wewnątrz kontrolki. Dostępne są: LEFT, CENTER lub RIGHT. Domyślna wartość to LEFT;
  • readonlybackground - kolor tła kontrolki, gdy ta jest w trybie "readonly" (tylko do odczytu);
  • relief - styl obramowania kontrolki. Domyślna wartość to SUNKEN, inne możliwe to: FLAT, RAISED, GROOVE i RIDGE;
  • selectbackground - kolor tła zaznazcenia;
  • selectborderwidth - szerokość obramowania zaznaczenia;
  • selectforeground - kolor zaznaczonego tekstu;
  • show - kontroluje sposób wyświetlania zawartości kontrolki. Gdy kontrolka zawiera jakiś tekst, jest on zastępowany podanym tutaj znakiem, typowym zastosowaniem tej opcji jest ukrywanie wpisywanego przez użytkownika hasła. W takim przypadku opcja ta powinna zostać ustawiona na "*";
  • state - kontroluje stan kontrolki, który może być ustawiony na: NORMAL, DISABLED (to samo co "readonly"). Domyślna wartość to NORMAL;
  • takefocus - określa, czy użytkownik może użyć tabulatora, by przekazać fokus tej kontrolce;
  • textvariable - powiązane z obiektem klasy StringVar dostępnej w module tkinter;
  • validate - określa kiedy zostanie wywołana funkcja z opcji validatecommand kontrolki. Możesz użyć jako ustawienia wartości "focus", by wywołanie funkcji było wykonywane za każdym razem, gdy kontrolka otrzymuje lub traci fokus, "focusin by wywołanie funkcji było tylko, gdy kontrolka otrzyma fokus, "focusout" gdy kontrolka traci fokus, "key" gdy jakakolwiek modyfikacja nastąpi i ALL dla wszystkich tych sytuacji. Domyślnie ustawienie to NONE (brak wywołania funkcji);
  • validatecommand - funkcja lub metoda, która zostanie wywołana by sprawdzić poprawność wpisywanego tekstu. Funkcja powinna zwracać True, gdy wpisany tekst spełnia warunki, False w przeciwnym razie;
  • vcmd - to samo co validatecommand;
  • width - szerokość kontrolki w jednostkach średniej szerokości liter tekstu;
  • xscrollcommand - używane w celu połączenia kontrolki z kontrolką horyzontalnego paska przewijania. Ta opcja powinna być ustawiona by ustawić metodę w odpowiadającej kontrolce scrollbar.

Opcje konstruktora klasy Button

  • activebackground - kolor tła przycisku, gdy ten jest wciśnięty;
  • activeforeground - kolor tekstu, gdy kontrolka jest aktywna;
  • anchor - określa, gdzie na przycisku powinien być umieszczony tekst (lub obraz). Możliwe ustawienia to N (north), NE (north-east), E (east), SE (south-east), S (south), SW (south-west), W (west), NW (north-west);
  • background - kolor tła;
  • bg - to samo co background;
  • bitmap - bitmapa do wyświetlania na kontrolce. Gdy opcja image jest ustawiona to ta pozycje jest pomijana;
  • borderwidth - szerokość obramowania przyciusku;
  • bd - to samo co borderwidth;
  • command - funkcja lub metoda, która zostanie wywołana, gdy przycisk zostanie wciśnięty;
  • compound - kontroluje jak tekst i grafika są wyświetlane razem na przycisku. Domyślnie, jeżeli opcja image lub bitmap są ustawione, to tekst nie jest rysowany. Jeżeli opcja ta jest ustawiona na CENTER to tekst zostanie wyświetlony ponad grafiką, zaś ustawienie BUTTON, LEFT, RIGHT lub TOP sprawia, że tekst jest rysowany nad, po lewej, po prawej lub pod grafiką. Domyślne ustawienie to NONE;
  • cursor - określa, jaki kursor ma być wyświetlany, gdy myszka znajdzie się nad kontrolką;
  • default - gdy ustawione, to kontrolka jest ustawiona jako domyślny przycisk. Domyślnie ustawione na DISABLED;
  • disabledforeground - kolor tła, gdy przycisk jest nieaktywny
  • font - określa krój czcionki;
  • foreground - kolor tła;
  • fg - to samo co foreground;
  • height - wysokość przycisku, gdy ten wyświetla tekst to wyrażona jest w jednostkach wysokości tekstu, w przeciwnym razie w pikselach;
  • highlightbackground - kolor obramowania, gdy kontrolka nie ma fokusa;
  • highlightcolor - kolor obramowania, gdy kontrolka ma fokus;
  • highlightthickness - szerokość obramowania podświetlenia;
  • image - obraz do wyświetlenia na kontrolce;
  • justify - wyrównanie tekstu. Dostępne opcje: LEFT, RIGHT lub CENTER. Domyślna wartość to CENTER;
  • overrelief - określa sposób zachowania przycisku, gdy kursor myszy znajdzie się nad nim. Dostępne opcje to FLAT, GROOVE, RAISED, RIDGE, SOLID lub SUNKEN;
  • padx - dodatkowe poziome odsunięcie od tekstu lub obrazu wyświetlanego na przycisku;
  • pady - dodatkowe pionowe odsunięcie od tekstu lub obrazu wyświetlanego na przycisku;
  • relief - dekoracja obramowania, zazwyczaj ustawiona na SUNKEN, gdy przycisk jest wciśnięty i RAISED w przeciwnym przypadku. Inne możliwe ustawienia to GROOVE i FLAT. Domyślna wartość to RAISED;
  • state - stan przycisku, możliwe ustawienia: NORMAL, ACTIVE lub DISABLED. Domyślna wartość to NORMAL;
  • takefocus - określa, że przycisk otrzymuje fokus;
  • text - tekst wyświetlany na przycisku;
  • textvariable - zmienna powiązana z klasą StringVar z modułu tkinter;
  • underline - ustawia podkreślenie tekstu. Domyślnie -1, co oznacza, że tekst nie jest podkreślany;
  • width - długość przycisku wyrażona w szerokości średniej tekstu, gdy w kontrolce wyświetlany jest tekst, natomiast w pikselach, gdy wyświetlany jest obraz;
  • wraplength - określa, czy tekst ma zostać literka po literce wyświetlany w poziomie. Domyślnie ustawione na 0, co oznacza wyświetlanie tekstu w jednym ciągu

Kontrolka Text

Kontrolka ta umożliwia wpisywanie, wczytywanie i wyświetlanie tekstu wieloliniowego. Oto przykład kodu wykorzystującego tę kontrolkę:

Listing 7
  1. import tkinter as tk
  2. window = tk.Tk() # tworzenie okna głównego programu
  3. window.geometry("500x500") # ustawienie wymiarów okna
  4. window.title("Przykładowy program z użyciem kontrolki Text") # ustawienie tytułu okna
  5. textbox = tk.Text(window, width = 100, height = 50)
  6. textbox.pack()
  7. textbox.place(x=10, y=10)
  8. textbox.insert(tk.END, "Witaj Świecie", ("h1")) # tekst z formatowaniem zapisanym w znaczniku h1, który nieco później zostanie utworzony
  9. textbox.insert(tk.END, "n")
  10. textbox.insert(tk.END, "Witaj świecie programowania,nCo będziesz nas dziś tu zabawiał", ("p")) # dodawanie tekstu bez dodatkowego formatowania
  11. textbox.tag_add("h1", "1.0", "1.0") # dodanie nowego tagu o nazwie h1 (jak nagłówek główny w HTML-u), drugi i trzeci argument to początek zaznaczenia i koniec zaznaczenia (w tym przypadku wybrałem, że zaznaczenia nie będzie 1 - oznacza pierwszy wiersz a liczba po kropce określa numer znaku w danym wierszu
  12. textbox.tag_config("h1", background="yellow", foreground="blue", font=("Times New Roman", 20)) # formatowanie tekstu: kolor tła; kolor tekstu; czcionka podana jako krotka z: nazwą kroju, rozmiarem
  13. textbox.tag_add("p", "1.0", "1.0")
  14. textbox.tag_config("p", foreground="#1130ff")
  15. window.mainloop() # wywołanie głównej pętli programu

Powyższy kod pokazuje sposób, w jaki można tworzyć i wykorzystywać w przebiegły wręcz sposób tagi do bardziej zaawansowanego formatowania tekstu. Widok okna programu został pokazany na poniższym rysunku.

Widok programu napisanego w Pythonie z wykorzystaniem modułu tkinter i kontrolki Text
Rys. 1
Przykład użycia kontrolki Text

Opcje, z jakimi można wywołać konstruktor kontrolki Text:

  • bg - kolor tła;
  • bd - szerokość obramowania kontrolki;
  • cursor - kursor, który się pojawi gdy wskaźnik myszki znajdzie się nad kontrolką;
  • exportselection - eksportuje zaznaczenie do schowka, aby tego uniknąć trzeba ustawić tą opcję na 0
  • font - ustawia czcionkę (należy podać jako krotkę zawierającą nazwę kroju oraz rozmiar czcionki
  • fg - domyślny kolor czcionki wyświetlanego tekstu;
  • height - wysokość wyrażona w liniach tekstu. Ta wartość odnosi się do aktualnych ustawień czcionki;
  • highlightbackground - kolor obramowania kontrolki, gdy ta nie ma fokusa;
  • highlightcolor - kolor podświetlenie kontrolki, gdy ta ma fokus;
  • highlightthickness - grubość obramowania kontrolki dla wyświetlania fokusa;
  • insertbackground - kolor karetki kursora oznaczającego miejsce wpisywania tekstu;
  • insertborderwidth - rozmiar obramowania 3W wokół karetki kursora wpisywania tekstu. Domyślna wartość to 0;
  • insertofftime - liczba określająca w milisekundach czas znikania kursora karetki wpisywania tekstu. Domyślna wartość to 300 milisekund;
  • insertontime - liczba określająca w milisekundach czas na jaki kursor karetki wpisywania tekstu się pojawia. Domyślna wartość to 600 milisekund;
  • insertwidth - szerokość kursora karetki. Domyślna wartość to 2 piksele;
  • padx - odsunięcie tekstu od prawej i lewej krawędzi kontrolki wyrażona w pikselach;
  • pady - odsunięcie tekstu od górnej i dolnej krawędzi kontrolki wyrażona w pikselach;
  • relief - - dekoracja obramowania, zazwyczaj ustawiona na SUNKEN, gdy przycisk jest wciśnięty i RAISED w przeciwnym przypadku. Inne możliwe ustawienia to GROOVE i FLAT. Domyślna wartość to RAISED;
  • selectbackground - kolor tła zaznaczonego tekstu;
  • selectborderwidth - szerokość obramowania rysowanego wokół zaznaczonego tekstu;
  • spacing1 - ta opcja określa ile dodatkowego miejsca jest dodawanego powyżej każdej linii tekstu. Jeżeli linia jest łamana to dodatkowa przestrzeń jest dodawana tylko ponad pierwszą linijką tekstu. Domyślnie ustawione na zero;
  • spacing2 - określa ile dodatkowej przestrzeni ma zostać dodanej pomiędzy łamanymi liniami tekstu. Domyślna wartość to zero;
  • spacing3 - określa ile dodatkowej przestrzeni ma zostać dodanej poniżej każdej linii tekstu. Jeżeli tekst jest łamany dodatkowa przestrzeń jest dodawana poniżej ostatniej linii. Domyślna wartość to zero;
  • state - ustawienie stanu kontrolki. Możliwe opcje to: NORMAL (domyślne) lub DISABLED;
  • width - szerokość kontrolki wyrażona w średniej szerokości znaków bieżącej czcionki;
  • wrap - kontroluje, czy linie, które są zbyt długie aby zmieścić się w kontrolce mogą być wyświetlana. Domyślnie ustawione na WORD - co oznacza łamanie linii tekstu po ostatnim zdaniu, które się w danej linii mieści. Ustawienie na CHAR spowoduje łamanie tekstu na dowolnym pierwszym znaku, który się nie mieści w kontrolce;
  • xscrollcommand - by tekst kontrolki był poziomo skrolowany, należy ustawić tą opcję na metodę set() kontrolki typu Scrollbar;
  • yscrollcommand - by tekst kontrolki był pionowo skrolowany, należy ustawić tą opcję na metodę set() kontrolki typu Scrollbar;

Kontrolka Checkbox

Kolejną z podstawowych kontrolek jest Checkbox będący kontrolką wyboru (zaznaczenia i odznaczenia). Oto przykład utworzenia tej kontrolki:

Listing 8
  1. var = tk.IntVar() # zmienna przechowująca dane typu int, która zostanie przypisana do kontrolki
  2. checkbutton = tk.Checkbutton(window, text="Rozwiń", variable=var)
  3. checkbutton.pack()
  4. checkbutton.select() # przełączam w stan zaznaczenia

Opcje, które już wcześniej nie zostały opisane:

  • command - funkcja, która zostanie wywołana przy wciśnięciu przycisku;
  • offvalue - ustawienie wartości, gdy przycisk jest odznaczony. Domyślna wartość do zero;
  • onvalue - ustawienie wartości, gdy przycisk jest zaznaczony. Domyślna wartość to 1;
  • value - przypisanie zmiennej, która będzie ustawiana za każdym razem, gdy stan przycisku się zmieni. Ta zmienna może być obektem klasy IntVar lub StringVar.

Kontrolka Radiobutton

Kontrolka tego typu umożliwia stworzenie serii przycisków, które umożliwiają stworzenie opcji jednokrotnego wyboru. Oto prosty kod:

Listing 9
  1. rb_var = tk.StringVar() # zmienna sterująca zaznaczeniem kontrolki
  2. rb_female = tk.Radiobutton(window, variable = rb_var, value = "k", text = "kobieta") # kontrolka pierwsza
  3. rb_male = tk.Radiobutton(window, variable = rb_var, value = "m", text = "mężczyzna")
  4. rb_var.set("k") # ustawiam zaznaczenie na kontrolkę dla opcji kobieta
  5. rb_female.pack()
  6. rb_male.pack()

Lista ważniejszych dla tej kontrolki opcji:

  • command - podpinanie funkcji w odpowiedzi na kliknięcie przycisku;
  • value - wartość, dla której kontrolka jest ustawiona w stan zaznaczenia;
  • variable - zmienna sterująca zaznaczeniem, będąca obiektem klasy StringVar z modułu tkinter. Gdy zawartość zmiennej jest równa wartości zapisanej w ustawieniu value, to kontrolka jest zaznaczona, w przeciwnym przypadku odznaczona;
  • text - tekst wyświetlany w kontrolce

Kontrolka Listbox

Kontrolka Listbox umożliwia wyświetlania listy wyboru różnych pozycji. Oto przykład programu wykorzystującego taką listę:

Listing 10
  1. import tkinter as tk
  2. import datetime as dt
  3. window = tk.Tk() # tworzenie okna głównego programu
  4. window.geometry("430x160") # ustawienie wymiarów okna
  5. window.title("Przykładowy program") # ustawienie tytułu okna
  6. labelDescription = tk.StringVar() # zminna, która będzie ustawiała tekst wypisywany w kontrolkach
  7. label = tk.Label(window, textvariable = labelDescription) # tworzenie kontrolki Label z ustawieniem wyświetlania tekstu zawartego w zmiennej typu StringVar
  8. labelDescription.set("Przykładowy label:") # ustawienie tekstu zawartego w zmiennej oraz (jednocześnie) w kontrolce label
  9. label.pack() # wstawianie kontrolki do okna głównego
  10. label.place(x= 10, y = 10) # zmiana położenia kontrolki w oknie
  11. edit = tk.Entry(window, width = 50, textvariable = labelDescription) # tworzenie kontrolki Entry z przypisaniem jej zmiennej labelDescription
  12. edit.pack() # dodawanie jej do okna
  13. edit.place(x = 10, y = 30) # zmiana położenia kontrolki w oknie głównym
  14. def buttonClicked(): # zdarzenie związane z kliknięciem przycisku
  15. labelDescription.set(dt.datetime.now()) # tutaj ustawiam zawartość zmiennej labelDescription i jednocześnie zmieniam tekst wyświetlany w kontrolce Label
  16. button = tk.Button(window, text = "Wczytaj bierzącą datę", command = buttonClicked) # tworzę przycisk, który będzie wstawiał datę
  17. button.pack() # wstawiam przycisk na okno główne
  18. button.place(x = 10, y = 50) # ustawiam położenie przycisku
  19. ct_listbox = tk.Listbox(window, width=50, height = 4) # tworzę kontrolkę listbox
  20. ct_listbox.pack() # wstawiam ją w oknie
  21. ct_listbox.place(x = 10, y = 80) # ustawienie położenia kontrolki
  22. ct_listbox.insert(tk.END, "Tydzień dzieci ma siedmioro") # dodaję pierwszy element do kontrolki
  23. def listboxSelect(index): # to będzie funkcja, którą podepnę pod zdarzenie <<ListboxSelect>> - wywoływane, gdy zmienione zostanie zaznaczenie w kontrolce
  24. labelDescription.set(ct_listbox.get(ct_listbox.curselection())) # tutaj wyciągam tekst zaznaczenie i wstawiam go do zmiennej labelDescription co powoduje wyświetlenie tego tekstu w kontrolkach Entry i Label
  25. for item in ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"]: # iteruję po elementach listy
  26. ct_listbox.insert(tk.END, item) # wstawiam je kolejno do listbox-a
  27. ct_listbox.bind('<<ListboxSelect>>', listboxSelect) # łączę zdarzenie zmiany zaznaczenia z funkcją listboxSelect
  28. window.mainloop() # wywołanie głównej pętli programu

W powyższym kodzie oprócz pokazania jak utworzyć kontrolkę typu Listbox pokazałem jak:

  • dodawać do niej nowe elementy (linijka 31 i 34);
  • podpiąć pod tą kontrolkę obsługę zdarzenia zmiany zaznaczenia (linia 38);
  • ustawić ręcznie szerokość i wysokość okna głównego (linia 6);
  • ustawiać położenie poszczególnych kontrolek na oknie głównym (linie 14, 18, 25 i 29)

Dostępne opcje konstruktora klasy Listbox w znacznym stopniu się pokrywają z tymi, które już wcześniej wymienione zostały. Z tego też względu poniżej wypiszę tylko ich listę:

  • background
  • bd;
  • bg
  • borderwidth
  • cursor
  • exportselection
  • fg
  • font
  • foreground
  • height
  • highlightbackground
  • highlightcolor
  • highlightthickness
  • relief
  • selectbackground
  • selectborderwidth
  • selectforeground
  • selectmode
  • setgrid
  • takefocus
  • width
  • xscrollcommand
  • yscrollcommand
  • listvariable

Kontrolka Scrollbar

Kontrolki tego typu to paski przewijania, które jako takie mogą być podpinane pod kontrolki takie jak Text czy Entry. Przykład zastosowania kontrolki Scrollbar jako paska przewijania poziomego dla kontrolki typu Scrollbar.

Listing 11
  1. import tkinter as tk
  2. window = tk.Tk() # tworzenie okna głównego programu
  3. window.geometry("440x180") # ustawienie wymiarów okna
  4. window.title("Przykładowy program z użyciem kontrolki Text") # ustawienie tytułu okna
  5. sb_textbox = tk.Scrollbar(window) # tworzenie kontrolki paska przewijania
  6. textbox = tk.Text(window, width = 50, height = 10, yscrollcommand = sb_textbox.set) # tworzenie textbox-a i podpinanie pod yscrollcommand metody set z paska przewijania
  7. textbox.pack()
  8. sb_textbox.place(in_ = textbox, relx = 1., rely = 0, relheight = 1.) # ustawienie miejsca oraz wymiarów paska przewijania (relatywnie w odniesieniu do wymiarów kontrolki textbox-a
  9. textbox.place(x=10, y=10)
  10. textbox.insert(tk.END, "Pan Tadeusz", ("h1")) # tekst z formatowaniem zapisanym w znaczniku h1, który nieco później zostanie utworzony
  11. textbox.insert(tk.END, "n")
  12. textbox.insert(tk.END, """Litwo! Ojczyzno moja! ty jesteś jak zdrowie.
  13. Ile cię trzeba cenić, ten tylko się dowie,
  14. Kto cię stracił. Dziś piękność twą w całej ozdobie
  15. Widzę i opisuję, bo tęsknię po tobie.
  16. Panno Święta, co jasnej bronisz Częstochowy
  17. I w Ostrej świecisz Bramie! Ty, co gród zamkowy
  18. Nowogródzki ochraniasz z jego wiernym ludem!
  19. Jak mnie dziecko do zdrowia powróciłaś cudem
  20. (Gdy od płaczącej matki pod Twoją opiekę
  21. Ofiarowany, martwą podniosłem powiekę
  22. I zaraz mogłem pieszo do Twych świątyń progu
  23. Iść za wrócone życie podziękować Bogu),
  24. Tak nas powrócisz cudem na Ojczyzny łono.
  25. Tymczasem przenoś moję duszę utęsknioną
  26. Do tych pagórków leśnych, do tych łąk zielonych,
  27. Szeroko nad błękitnym Niemnem rozciągnionych;
  28. Do tych pól malowanych zbożem rozmaitem,
  29. Wyzłacanych pszenicą, posrebrzanych żytem;
  30. Gdzie bursztynowy świerzop, gryka jak śnieg biała,
  31. Gdzie panieńskim rumieńcem dzięcielina pała,
  32. A wszystko przepasane, jakby wstęgą, miedzą
  33. Zieloną, na niej z rzadka ciche grusze siedzą.""", ("p")) # dodawanie tekstu bez dodatkowego formatowania
  34. textbox.tag_add("h1", "1.0", "1.0") # dodanie nowego tagu o nazwie h1 (jak nagłówek główny w HTML-u), drugi i trzeci argument to początek zaznaczenia i koniec zaznaczenia (w tym przypadku wybrałem, że zaznaczenia nie będzie 1 - oznacza pierwszy wiersz a liczba po kropce określa numer znaku w danym wierszu
  35. textbox.tag_config("h1", font=("Times New Roman", 20)) # formatowanie tekstu: kolor tła; kolor tekstu; czcionka podana jako krotka z: nazwą kroju, rozmiarem
  36. textbox.tag_add("p", "1.0", "1.0")
  37. textbox.tag_config("p", foreground="#1130ff")
  38. sb_textbox.config(command = textbox.yview) # podpinanie pod kontrolkę paska przewijania metody yview textbox-a
  39. window.mainloop() # wywołanie głównej pętli programu

Wynikiem działania powyższego kodu jest widoczny na poniższym rysunku.

Przykład użycia kontrolki scrollbar z modułu tkinter języka programowanie Python
Rys. 2
Przykład użycia kontrolki scrollbar z modułu tkinter języka programowanie Python

Kontrolka Spinbox

Kontrolka ta umożliwia wczytywanie wartości liczbowych i jest wyposażona automatycznie w mały pasek "przewijania" wartości. Możliwe jest również ustawienie minimalnej i maksymalnej możliwej wartości, jaka może zostać wpisana. Oto prosty przykład kodu tworzenia takiej kontrolki:

Listing 12
  1. value = tk.IntVar()
  2. spinbox = tk.Spinbox(window, from_ = 3, to = 10, textvariable = value)
  3. spinbox.pack()
Widok kontrolki Spinbox z modułu tkinter języka programowania Python
Rys. 3
Widok kontrolki Spinbox z modułu tkinter języka programowania Python

Kontrolka Scale

Ta z kolei kontrolka przypomina nieco kontrolkę Scrollbar, jednakże ta kontrolka służy do ustawiania i wyświetlania wartości liczbowych. Oto przykład kodu tworzącego taką kontrolkę:

Listing 13
  1. scale = tk.Scale(window, from_ = 0, to = 10, orient=tk.HORIZONTAL) # tworzę kontrolkę typu Scale przyjmującą wartości całkowite od 0 do 10 i ustawioną na ułożenie poziome
  2. scale.pack()
  3. variable = tk.StringVar()
  4. label = tk.Label(window, textvariable = variable) # to będzie kontrolka pomocnicza
  5. label.pack()
  6. def scale_changed(ch):
  7. variable.set(ch) # tu będę wyświetlał dane, mógłbym je wyciągnąć również korzystając z metody get: scale.get()
  8. scale.config(command = scale_changed) # podpinam funkcję scale_changed pod zdarzenie wywoływane, gdy wartość ustawienia kontrolki została zmieniona

Na poniższym rysunku można zobaczyć przykład kontrolki typu Scale.

Widok kontrolki Scale z modułu tkinter języka programowania Python
Rys. 4
Widok kontrolki Scale z modułu tkinter języka programowania Python

Kontrolka Canvas

Jak sama nazwa wskazuje, kontrolka ta służy do rysowania po niej elementów graficznych. Co ciekawe wszystkie elementy rysowane w tejże kontrolce są przechowywane i odrysowywane z pamięci. Można rzec, że ta kontrolka służy do wyświetlania elementów graficznych przechowywanych w pamięci, czyli jest to grafika wektorowa.

Listing 14
  1. import tkinter as tk
  2. window = tk.Tk()
  3. window.title("Rysowanie")
  4. window.geometry("500x500")
  5. def draw(event): # metoda, którą podepnę pod zdarzenie ruchu myszki nad kontrolką canvas z wciśniętym lewym przyciskiem myszy
  6. canvas.create_oval(event.x - 2, event.y - 2, event.x + 2, event.y + 2) # tworzę okrąg na kontrolce canvas przy każdym ruchu myszką
  7. canvas = tk.Canvas(window, width = 450, height = 450) # tworzę kontrolkę typu Canvas
  8. canvas.place( x= 25, y = 25) # umieszczam ją na ekranie
  9. canvas.create_rectangle((0, 0, 450, 450), fill="#ffffff", width = 0) # rysuję biały prostokąt
  10. canvas.bind("<B1-Motion>", draw) # podpinam zdarzenie pod kontrolkę
  11. window.mainloop()

Przykład działania tego prostego programu widoczny jest na poniższym rysunku.

Przykład zastosowania kontrolki Canvas z modułu tkinter do rysowania za pomocą myszki
Rys. 5
Przykład zastosowania kontrolki Canvas z modułu tkinter do rysowania za pomocą myszki

Komentarze