Lekcja 11- GUI, TkInter, generator kodów QR

Lekcja 11- GUI, TkInter, generator kodów QR
Photo by Marielle Ursua / Unsplash

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