Lekcja 11- GUI, TkInter, generator kodów QR
GUI- Graphical User Interface- graficzny interfejs użytkownika (przyciski, ikony, scrollbare itd.)
Biblioteki GUI dla Pythona:
- TkInter- brzydki wygląd, mało nowoczesny
- Qt (Pyside, PyQt)- najpopularniejszy, dostępny dla różnych języków programowania
- GTK (PyGObject)- zbudowany na Linuxie
- Kivy- wykorzystywany na urządzenia mobilne
- DearPyGUI- przy wyświetlaniu w tej bibliotece pomaga karta graficzna, przez to aplikacja działa szybciej
- Flet- nowa biblioteka, z wykorzystaniem Fluttera
TkInter
import biblioteki:
import tkinter as tk
tworzenie okna podstawowego:
okno = tk.Tk()
okno.title("Jakiś tytuł")
uruchomienie pętli głównej programu:
okno.mainloop() #dzięki niej okno nam się nie zamyka
Te trzy rzeczy zawsze muszą się znaleźć w programie.
Komponenty wykorzystane przez nas na zajęciach:
- Label (etykieta z tekstem)
- Button (przycisk)
- Entry (pole do wpisywania zawartości)
- Frame (ramka do grupowania elementów)
Jeszcze MUSIMY mieć napisane w jaki sposób rozmieszczamy komponenty (pod każdą linijką z danym komponentem).
Służą do tego metody:
pack()- rozmieszcza półautomatycznie
grid()- rozmieszcza na siatce wierszy i kolumn
Ładniejszy wariant modułu TkInter do zaimportowania:
import tkinter as tk
import customtkinter as ctk
Generator QRCode- program z zajęć:
import tkinter as tk
import qrcode
from PIL import ImageTk
def generuj_qr(): #funkcje jako czasownik, klasy jako rzeczownik
global qrkod, obrazek #musimy obrazek zrobic globalnym poza funkcje, zeby mogl byc pozniej uzywany
dane = wprowadz.get()
qrkod = qrcode.make(dane) #qr kod stworzony na podstawie linku w danych
obrazek = ImageTk.PhotoImage(qrkod)
etykieta2.config(image = obrazek) #obrazek jest tylko wewnatrz funkcji
okno = tk.Tk()
okno.title("Generator QRCode")
okno.configure(padx=50, pady=50)
etykieta = tk.Label(okno, text = "Wklej linka w pole poniżej:") #okno w nawiasie to rodzic, musi byc
etykieta.pack() # pozwala nam umiescic komponent z etykieta, zawsze musi byc
wprowadz = tk.Entry(okno, width = 100)
wprowadz.pack() #pack uruchamia kazdy komponent, musi byc po kazdym komponencie
przycisk = tk.Button(okno, text = "Generuj", command=generuj_qr)
przycisk.pack()
przycisk2 = tk.Button(okno, text = "Zapisz QRkod", command=zapisz_qr)
przycisk.pack()
etykieta2 = tk.Label(okno, text="Tekst zamieniany na QR")
etykieta2.pack()
okno.mainloop()
#dorobic przycisk, ktory zapisze obrazek qrkod, dorzucic dodatkowa funkcje
# ktora zapisze obrazek jako png