blog.furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Najprostszy program w Tkinter

Poniżej najprostszy przykład programu w Tkinter pod Python 2.7 i 3.x. Dla wersji 3.x wystarczy zamienić nazwę modułu z Tkinter na tkinter (z małej litery).
Program oprócz wyświetlenia okienka nic nie robi ale to jest minimum jakie potrzeba do uruchomienia programu.

from Tkinter import *

Tk().mainloop()

Ponieważ nie jest zalecane importowania z użyciem gwiazdki więc zapiszę to tradycyjnie. Pozwoli to też uwidocznić, które elementy w programie pochodzą z modułu Tkinter

import Tkinter

Tkinter.Tk().mainloop()

Dla dalszych działań zapiszę to trochę inaczej

import Tkinter as tk

master = tk.Tk()
# tutaj beda umieszczone inne instrukcje programu
master.mainloop()

W kodzie następuje

  • import modułu Tkinter - dla wygody nadałem jej alias tk aby było mniej pisania.
  • stworzenie głównego okna Tkinter.Tk() - często "zwyczajowo" przypisywane do zmiennej master lub root.
  • uruchomienie funkcji mainloop() - czyli głównej pętli, która będzie "napędzać" cały program.

W kodzie zaznaczyłem także gdzie przyjdą kolejne instrukcje programu.


mainloop() to pętla, która się wykonuje aż do zamknięcia okna więc linie kodu po tej instrukcji są wykonywane dopiero po wyjściu z programu.

W mainloop() wykonują się w pętli takie rzeczy jak pobieranie informacji o myszy i klawiaturze, przekazywanie tego do obiektów w oknie, obsługa zdarzeń, wywoływanie funkcji przypisanych do menu i przycisków w oknie - tak więc nasze funkcje nie mogą się wykonywać w nieskończoność (nie powinny mieć nieskończonych pętli while True lub używać time.sleep()) bo inaczej reszta zadań nie będzie wykonywanych i okno przestanie reagować czyli potocznie "zawiśnie".

Shelle pythona takie jak IDLE czy DreamPie są napisane w Tkineter więc do swojego działania wywołują mainloop() co sprawia, że nasz kod może zadziałać i bez wykonania mainloop() ale celem jest uruchamianie programu bez użycia IDLE czy DreamPie więc mainloop() musi być w naszym kodzie.


Powyższy kod jest napisany dla Python 2.7 (lub dla 3.x jeśli zmienić Tkinter na tkinter) ale można też wykorzystać try/except do stworzenia wersji działającej zarówno w 2.7 jak i 3.x
Przy okazji przydatne okazuje się użycie aliasu tk.

try:
    import Tkinter as tk  # python 2.7
except:
    import tkinter as tk  # python 3.x

master = tk.Tk()
master.mainloop()
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury