Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
01668 033221 15645420 na godz. na dobę w sumie
Python dla zupełnie początkujących. Owoce programowania. Wydanie IV - ebook/pdf
Python dla zupełnie początkujących. Owoce programowania. Wydanie IV - ebook/pdf
Autor: Liczba stron: 736
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-4683-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> python - programowanie
Porównaj ceny (książka, ebook (-20%), audiobook).

Python jest wszechstronnym językiem programowania o imponującej elastyczności i wydajności. Można dzięki niemu rozwiązywać przeróżne problemy programistyczne z różnych dziedzin wiedzy. Nawet jeśli nie masz zamiaru stać się pełnoetatowym programistą, prędko się zorientujesz, jak świetnym i elastycznym narzędziem jest Python. Można za jego pomocą budować oprogramowanie, ale również wspierać pracę statystyków, ekonomistów, maklerów giełdowych, biologów, fizyków czy analityków finansowych. Wystarczy tylko znaleźć sposób analizy problemu i nauczyć się implementować go w programie.

Z tej książki skorzystasz, nawet gdy nie masz żadnego doświadczenia w projektowaniu i tworzeniu oprogramowania. Dzięki prostym przykładom i zrozumiałemu pseudokodowi, schematom blokowym oraz innym narzędziom zdobędziesz wiedzę o projektowaniu oprogramowania i jego implementowania w języku Python. W każdym rozdziale znalazło się wiele przykładowych projektów oraz zwięzłych i praktycznych programów. Książkę rozpoczęto od przedstawienia podstawowych informacji o przechowywaniu danych, danych wejściowych i wyjściowych, struktur kontrolnych, funkcji, sekwencji, list, operacji wejścia-wyjścia oraz obiektów tworzonych za pomocą klas zdefiniowanych w bibliotece standardowej. Następnie omówiono zagadnienia tworzenia klas, dziedziczenia i polimorfizmu, a także definiowania funkcji rekurencyjnych.

W tej książce:

Python. Lepszy niż myślisz. Przydatniejszy niż sądzisz.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Starting Out with Python (4th Edition) Tłumaczenie: Robert Górczyński ISBN: 978-83-283-4682-6 Authorized translation from the English language edition, entitled: STARTING OUT WITH PYTHON, Fourth Edition; ISBN 0134444329; by Tony Gaddis; published by Pearson Education, Inc. Copyright © 2018, 2015, 2012, 2009 by Pearson Education, Inc. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by HELION S.A. Copyright © 2018. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz HELION SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. HELION SA ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/pyzup4.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/pyzup4 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Wstęp .................................................................................. 9 Rozdział 1. Wstępne informacje na temat komputerów i programowania ............................................................. 19 1.1. Wstęp....................................................................................19 1.2. Sprzęt i oprogramowanie .......................................................20 1.3. W jaki sposób komputer przechowuje dane ............................26 1.4. W jaki sposób działa program ................................................32 1.5. Python ...................................................................................40 Pytania kontrolne .............................................................................44 Rozdział 2. Dane wejściowe, przetwarzanie i dane wyjściowe ...... 51 2.1. Projektowanie programu ........................................................51 2.2. Dane wejściowe, przetwarzanie i dane wyjściowe ...................57 2.3. Wyświetlanie danych wyjściowych za pomocą funkcji print() ...58 Komentarze ...........................................................................60 2.4. 2.5. Zmienne ................................................................................62 2.6. Odczyt danych wejściowych z klawiatury ................................71 2.7. Wykonywanie obliczeń ...........................................................76 2.8. Więcej informacji na temat danych wyjściowych .....................88 2.9. Stałe nazwane........................................................................97 2.10. Grafika żółwia — wprowadzenie ............................................98 Pytania kontrolne ...........................................................................123 Ćwiczenia programistyczne.............................................................128 Rozdział 3. Struktury warunkowe i logika boolowska................... 133 Konstrukcja if .......................................................................133 Konstrukcja if-else ................................................................142 Porównywanie ciągów tekstowych........................................146 3.1. 3.2. 3.3. 5 Poleć książkęKup książkę 6 Spis treści 3.4. Zagnieżdżone struktury warunkowe i konstrukcja if-elif-else ....150 3.5. Operatory logiczne...............................................................158 3.6. Zmienne boolowskie ............................................................165 3.7. Grafika żółwia — ustalenie stanu żółwia...............................166 Pytania kontrolne ...........................................................................175 Ćwiczenia programistyczne.............................................................178 Rozdział 4. Struktury cykliczne......................................................... 187 4.1. Wprowadzenie do struktur cyklicznych .................................187 4.2. Oparta na warunku pętla while ............................................189 4.3. Oparta na liczniku pętla for ..................................................196 4.4. Obliczanie sumy bieżącej......................................................206 4.5. Wartownik...........................................................................210 4.6. Pętle weryfikacji danych wejściowych....................................212 4.7. Pętle zagnieżdżone ..............................................................217 4.8. Grafika żółwia — użycie pętli do rysowania wzorów .............224 Pytania kontrolne ...........................................................................228 Ćwiczenia programistyczne.............................................................231 Rozdział 5. Funkcje............................................................................ 237 5.1. Wprowadzenie do funkcji.....................................................237 5.2. Definiowanie i wywoływanie funkcji niezwracającej wartości ....240 Projektowanie programu używającego funkcji.......................246 5.3. Zmienne lokalne...................................................................252 5.4. 5.5. Przekazywanie argumentów funkcji ......................................254 5.6. Zmienne i stałe globalne.......................................................264 5.7. Wprowadzenie do funkcji zwracających wartość — generowanie liczb losowych.............................................267 5.8. Utworzenie własnej funkcji zwracającej wartość....................278 5.9. Moduł math ........................................................................290 5.10. Przechowywanie funkcji w modułach....................................292 5.11. Grafika żółwia — modularyzacja kodu za pomocą funkcji .....297 Pytania kontrolne ...........................................................................303 Ćwiczenia programistyczne.............................................................308 Rozdział 6. Pliki i wyjątki.................................................................. 317 6.1. Wprowadzenie do odczytu i zapisu plików ...........................317 Przetwarzanie plików za pomocą pętli ..................................335 6.2. 6.3. Przetwarzanie rekordów .......................................................342 6.4. Wyjątki ................................................................................353 Pytania kontrolne ...........................................................................365 Ćwiczenia programistyczne.............................................................369 Poleć książkęKup książkę Spis treści 7 Rozdział 7. Listy i krotki.................................................................... 373 7.1. Sekwencje............................................................................373 7.2. Wprowadzenie do list ..........................................................374 7.3. Wycinek listy ........................................................................381 7.4. Wyszukiwanie elementu listy za pomocą operatora in ...........384 7.5. Metody i użyteczne funkcje wbudowane listy........................385 Kopiowanie listy ...................................................................392 7.6. Przetwarzanie listy................................................................394 7.7. 7.8. Lista dwuwymiarowa............................................................405 7.9. Krotka..................................................................................409 7.10. Wyświetlanie danych listy za pomocą pakietu matplotlib.......411 Pytania kontrolne ...........................................................................427 Ćwiczenia programistyczne.............................................................431 Rozdział 8. Więcej informacji o ciągach tekstowych...................... 437 8.1. Podstawowe operacje ciągu tekstowego...............................437 8.2. Wycinek ciągu tekstowego ...................................................444 8.3. Testowanie, wyszukiwanie i operacje na ciągu tekstowym .....449 Pytania kontrolne ...........................................................................461 Ćwiczenia programistyczne.............................................................464 Rozdział 9. Słownik i zbiór................................................................ 469 Słownik................................................................................469 9.1. Zbiór....................................................................................493 9.2. 9.3. Serializacja obiektu...............................................................505 Pytania kontrolne ...........................................................................511 Ćwiczenia programistyczne.............................................................516 Rozdział 10. Klasy i programowanie zorientowane obiektowo...... 521 10.1. Programowanie proceduralne i zorientowane obiektowo ......521 10.2. Klasy ....................................................................................525 10.3. Praca z egzemplarzem..........................................................541 10.4. Techniki stosowane podczas projektowania klas....................562 Pytania kontrolne ...........................................................................573 Ćwiczenia programistyczne.............................................................576 Rozdział 11. Dziedziczenie.................................................................. 581 11.1. Wprowadzenie do dziedziczenia...........................................581 11.2. Polimorfizm .........................................................................595 Pytania kontrolne ...........................................................................601 Ćwiczenia programistyczne.............................................................602 Poleć książkęKup książkę 8 Spis treści Rozdział 12. Rekurencja ...................................................................... 605 12.1. Wprowadzenie do rekurencji ................................................605 12.2. Rozwiązywanie problemów za pomocą rekurencji.................608 12.3. Przykłady algorytmów rekurencyjnych ...................................612 Pytania kontrolne ...........................................................................619 Ćwiczenia programistyczne.............................................................622 Rozdział 13. Programowanie GUI....................................................... 625 13.1. Graficzny interfejs użytkownika.............................................625 13.2. Używanie modułu tkinter .....................................................628 13.3. Wyświetlanie tekstu za pomocą widżetu Label ......................631 13.4. Organizowanie widżetów przy użyciu kontenera Frame.........634 13.5. Widżet Button i informacyjne okna dialogowe ......................636 13.6. Pobieranie danych wejściowych za pomocą widżetu Entry.....639 13.7. Używanie etykiety jako elementu danych wyjściowych...........642 13.8. Przycisk opcji i pole wyboru ..................................................649 13.9. Tworzenie kształtów z wykorzystaniem widżetu Canvas ........655 Pytania kontrolne ...........................................................................676 Ćwiczenia programistyczne.............................................................680 Dodatek A Instalacja Pythona ......................................................... 685 Dodatek B Wprowadzenie do środowiska IDLE ............................. 687 Dodatek C Tablica znaków ASCII..................................................... 695 Dodatek D Predefiniowane nazwy kolorów................................... 697 Dodatek E Więcej informacji o poleceniu import .......................... 703 Dodatek F Instalowanie modułów za pomocą narzędzia pip....... 707 Dodatek G Odpowiedzi do pytań z punktów kontrolnych ............ 709 Skorowidz....................................................................... 727 Poleć książkęKup książkę Programowanie GUI Ł A I Z D Z O R 13 TEMATYKA 13.1 Graficzny interfejs użytkownika 13.2 Używanie modułu tkinter 13.3 Wyświetlanie tekstu za pomocą widżetu Label 13.4 Organizowanie widżetów przy użyciu kontenera Frame 13.5 Widżet Button i informacyjne okna dialogowe 13.6 Pobieranie danych wejściowych za pomocą widżetu Entry 13.7 Używanie etykiety jako elementu danych wyjściowych 13.8 Przycisk opcji i pole wyboru 13.9 Tworzenie kształtów z wykorzystaniem widżetu Canvas 13.1. Graficzny interfejs użytkownika 13.1. Graficzny interfejs użytkownika WYJAŚNIENIE. Graficzny interfejs użytkownika pozwala komunikować się z sys- temem operacyjnym i programami za pomocą elementów gra- ficznych, takich jak ikony, przyciski czy okna dialogowe. Interfejs użytkownika to ten element, z użyciem którego użytkownik komunikuje się z komputerem. Jednymi ze składników interfejsu użytkownika są urządzenia, takie jak klawiatura czy monitor. Innym jest sposób, w jaki komputer przyjmuje od użyt- kownika polecenia. Przez bardzo wiele lat jedynym sposobem komunikacji użyt- kownika z komputerem był interfejs wiersza poleceń, taki jak pokazany na rysunku 13.1. Interfejs ten zazwyczaj wyświetla znak zachęty — po nim użytkownik może wpro- wadzić polecenie, które następnie wykona komputer. Wielu użytkownikom komputerów, zwłaszcza początkującym, interfejs wiersza pole- ceń wydaje się zbyt skomplikowany. Wynika to z tego, że aby z niego korzystać, należy poznać wiele poleceń, z których każde ma inną składnię — podobnie jak w językach programowania. Jeśli podczas wprowadzania polecenia użytkownik popełni błąd, polecenie nie zadziała. 625 Poleć książkęKup książkę 626 Rozdział 13. Programowanie GUI Rysunek 13.1. Przykład interfejsu wiersza poleceń W latach 80. ubiegłego wieku w komercyjnych systemach operacyjnych pojawił się nowy typ interfejsu — graficzny interfejs użytkownika (ang. graphical user interface — GUI). Korzystając z graficznego interfejsu użytkownika, można się komunikować z komputerem za pomocą elementów graficznych wyświetlanych na ekranie. GUI przyczynił się także do spopularyzowania myszy komputerowej jako urządzenia wska- zującego. Zamiast wprowadzać polecenia przy użyciu klawiatury, użytkownik może wskazać dany element na ekranie i aktywować go naciśnięciem przycisku myszy. W przypadku GUI za interakcję z użytkownikiem w dużej mierze odpowiadają okna dialogowe, czyli okna, w których wyświetlają się informacje i które umożliwiają użyt- kownikowi wykonanie określonych operacji. Na rysunku 13.2 przedstawiłem przykła- dowe okno dialogowe, z pomocą którego użytkownik systemu operacyjnego Windows może zmodyfikować opcje internetowe. Zamiast wprowadzać tajemnicze polecenia, użytkownik korzysta z elementów graficznych, takich jak ikony, przyciski czy suwaki. Programy z GUI to programy sterowane zdarzeniami W środowiskach tekstowych, czyli np. w interfejsie wiersza poleceń, to program decy- duje o tym, w jakiej kolejności będą wykonane polecenia. Wyobraź sobie program obliczający pole powierzchni prostokąta. Najpierw program poprosi użytkownika o podanie długości pierwszego boku prostokąta. Użytkownik wprowadza wartość, po czym program prosi go o podanie długości drugiego boku prostokąta. Użytkownik wprowadza wartość, a program oblicza pole powierzchni prostokąta. Użytkownik nie ma wpływu na to, w jakiej kolejności będzie podawał dane. W przypadku środowiska wyposażonego w GUI to użytkownik wybiera kolejność operacji. Przykładowo na rysunku 13.3 pokazałem wyposażony w GUI program (utworzony w Pythonie) obliczający pole powierzchni prostokąta. Użytkownik może w tym przypadku podawać długości boków w dowolnej kolejności. Jeśli popełni błąd, może w każdej chwili usunąć wprowadzone dane i wpisać poprawne. Gdy użyt- kownik chce, aby program obliczył pole powierzchni prostokąta, klika przycisk Oblicz pole powierzchni. Ponieważ programy wyposażone w GUI muszą reagować na działania Poleć książkęKup książkę 13.1. Graficzny interfejs użytkownika 627 Rysunek 13.2. Przykład okna dialogowego Rysunek 13.3. Przykład programu wyposażonego w GUI wykonywane przez użytkownika, nazywa się je programami sterowanymi zdarzeniami. Użytkownik, klikając przycisk, powoduje wystąpienie w programie określonego zda- rzenia, a program musi to zdarzenie obsłużyć. Punkt kontrolny 13.1. Do czego służy interfejs użytkownika? 13.2. W jaki sposób działa interfejs wiersza poleceń? 13.3. Co decyduje o kolejności operacji w przypadku programu działającego w środowisku tekstowym, takim jak interfejs wiersza poleceń? 13.4. Co to są programy sterowane zdarzeniami? Poleć książkęKup książkę 628 Rozdział 13. Programowanie GUI 13.2. Używanie modułu tkinter 13.2. Używanie modułu tkinter WYJAŚNIENIE. Do utworzenia prostych programów z użyciem GUI w Pytho- nie można skorzystać z modułu tkinter. Język Python nie ma wbudowanych możliwości przeznaczonych do tworzenia gra- ficznego interfejsu użytkownika. Jednak jest dostarczany wraz z modułem o nazwie tkinter pozwalającym na tworzenie prostych programów wyposażonych w GUI. Nazwa „tkinter” jest skrótem od „Tk interface”. Moduł ten umożliwia programistom Pythona użycie biblioteki graficznej o nazwie Tk. Wiele innych języków programo- wania również używa biblioteki Tk. UWAGA. Istnieje wiele innych bibliotek GUI dostępnych dla Pythona. Skoro moduł tkinter jest dostarczany wraz z Pythonem, w tym rozdziale do tworzenia programów wyposażonych w graficzny interfejs użytkownika będę korzystał tylko z tego modułu. Program wyposażony w GUI wyświetla okno wraz z różnymi graficznymi widżetami, które użytkownik może wykorzystać do pracy z programem. Moduł tkinter dostar- cza 15 widżetów, które wymieniłem w tabeli 13.1. Wprawdzie w rozdziale nie omó- wię ich wszystkich, ale pokażę, jak można utworzyć prosty program wyposażony w GUI, służący do pobierania i wyświetlania danych. Najprostszy możliwy program wyposażony w GUI wyświetla puste okno. Na listingu 13.1 przedstawiłem kod takiego programu utworzonego za pomocą modułu tkinter. Po uruchomieniu programu zobaczysz okno pokazane na rysunku 13.4. Aby zakoń- czyć działanie programu, wystarczy po prostu kliknąć standardowy przycisk zamknię- cia programu w Windows (x), w prawym górnym rogu okna. UWAGA. Programy oparte na module tkinter nie zawsze działają niezawodnie z poziomu środowiska IDLE. Wynika to z tego, że IDLE samo w sobie korzysta z tkinter. Wprawdzie edytor IDLE zawsze można wykorzystać do utworzenia kodu źródłowego programów wyposażonych w GUI, ale najlepsze wyniki daje ich uruchamianie z poziomu wiersza poleceń systemu operacyjnego. W wierszu 3. został zaimportowany moduł tkinter. W definicji funkcji main() w wier- szu 7. następuje utworzenie egzemplarza klasy Tk modułu tkinter i przypisanie go zmiennej main_window. Obiekt ten jest widżetem głównym, czyli oknem głównym programu. W wierszu 10. znajduje się wywołanie funkcji mainloop() modułu tkinter. Funkcja jest do chwili zamknięcia okna jak pętla działająca w nieskończoność. Podczas tworzenia programów wyposażonych w GUI większość programistów prefe- ruje podejście zorientowane obiektowo. Zamiast przygotowywać funkcję tworzącą wyświetlane na ekranie elementy programu, powszechną praktyką jest zdefiniowanie Poleć książkęKup książkę Tabela 13.1. Widżety oferowane przez moduł tkinter 13.2. Używanie modułu tkinter 629 Widżet Button Canvas Checkbutton Entry Frame Label Listbox Menu Menubutton Scale Scrollbar Text Toplevel Opis Przycisk, którego kliknięcie może wywołać pewną akcję. Prostokątny obszar, który może być używany do wyświetlania grafiki. Przycisk, który może być w stanie „włączony” lub „wyłączony”. Obszar, w którym użytkownik może za pomocą klawiatury podać jeden wiersz danych wejściowych. Kontener, który może przechowywać inne widżety. Obszar wyświetlający jeden wiersz tekstu lub obraz. Lista, z której użytkownik może wybierać element. Lista opcji menu wyświetlanych po kliknięciu widżetu Menubutton. Menu wyświetlane na ekranie; użytkownik może je klikać. Obszar pozwalający na wyświetlenie wielu wierszy tekstu. w grupie i pozwala użytkownikowi na wybór jednej z kilku opcji. Widżet pozwalający użytkownikowi na wybór wartości przez przesunięcie suwaka. Ten widżet może być używany wraz z innymi typami, aby zapewnić możliwość przewijania. Widżet pozwalający użytkownikowi na wprowadzenie wielu wierszy tekstu danych wejściowych. Kontener, podobny do Frame, ale wyświetlany we własnym oknie. Message Radiobutton Widżet, który może być wybrany lub nie. Taki widżet zwykle pojawia się Listing 13.1 (empty_window1.py) 1 # Ten program wyświetla puste okno. 2 3 import tkinter 4 5 def main(): 6 # Utworzenie widżetu okna głównego. 7 main_window = tkinter.Tk() 8 9 # Wejście do pętli głównej tkinter. 10 tkinter.mainloop() 11 12 # Wywołanie funkcji main(). 13 main() klasy wraz z metodą __init__() generującą graficzny interfejs użytkownika. Po utworzeniu egzemplarza klasy na ekranie zostaje wyświetlony GUI. Na listingu 13.2 przedstawiłem zorientowaną obiektowo wersję programu wyświetlającego puste okno. Po jego urucho- mieniu zostanie wyświetlone puste okno, tak jak pokazałem wcześniej na rysunku 13.4. Poleć książkęKup książkę 630 Rozdział 13. Programowanie GUI Listing 13.2 (empty_window2.py) 1 # Ten program wyświetla puste okno. 2 3 import tkinter 4 5 class MyGUI: 6 def __init__(self): 7 # Utworzenie widżetu okna głównego. 8 self.main_window = tkinter.Tk() 9 10 # Wejście do pętli głównej tkinter. 11 tkinter.mainloop() 12 13 # Utworzenie egzemplarza klasy MyGUI. 14 my_gui = MyGUI() Rysunek 13.4. Okno wyświetlone przez program z listingu 13.1 W wierszach od 5. do 11. znajduje się definicja klasy MyGUI. Metoda __init__() tej klasy zaczyna się w wierszu 6. Polecenie w wierszu 8. tworzy widżet główny i przypi- suje go zmiennej main_window. W wierszu 11. mamy wywołanie funkcji mainloop() modułu tkinter. Polecenie w wierszu 14. tworzy egzemplarz klasy MyGUI. To powo- duje wykonanie metody __init__() klasy i wyświetlenie pustego okna na ekranie. Punkt kontrolny 13.5. Pokrótce wyjaśnij przeznaczenie następujących widżetów modułu tkinter: a. Label, b. Entry, c. Button, d. Frame. 13.6. Jak można utworzyć widżet główny? 13.7. Do czego służy metoda mainloop() modułu tkinter? Poleć książkęKup książkę 13.3. Wyświetlanie tekstu za pomocą widżetu Label 631 13.3. Wyświetlanie tekstu za pomocą widżetu Label 13.3. Wyświetlanie tekstu za pomocą widżetu Label WYJAŚNIENIE. Widżet Label można wykorzystać do wyświetlenia tekstu w oknie. Widżet Label można wykorzystać do wyświetlenia jednego wiersza tekstu w oknie. Widżet wymaga utworzenia egzemplarza klasy Label modułu tkinter. Program przed- stawiony na listingu 13.3 tworzy okno wraz z widżetem Label wyświetlającym komuni- kat Witaj, świecie!. Okno pokazałem na rysunku 13.5. Listing 13.3 (hello_world.py) 1 # Ten program wyświetla etykietę wraz z tekstem. 2 3 import tkinter 4 5 class MyGUI: 6 def __init__(self): 7 # Utworzenie widżetu okna głównego. 8 self.main_window = tkinter.Tk() 9 10 # Utworzenie widżetu Label zawierającego 11 # komunikat Witaj, świecie! 12 self.label = tkinter.Label(self.main_window, 13 text= Witaj, świecie! ) 14 15 # Wywołanie metody pack() widżetu Label. 16 self.label.pack() 17 18 # Wejście do pętli głównej tkinter. 19 tkinter.mainloop() 20 21 # Utworzenie egzemplarza klasy MyGUI. 22 my_gui = MyGUI() Rysunek 13.5. Okno wyświetlone przez program z listingu 13.3 Klasa MyGUI jest bardzo podobna do użytej w programie z listingu 13.2. Jej metoda __init__() generuje graficzny interfejs użytkownika podczas tworzenia egzemplarza klasy. W wierszu 8. mamy utworzenie widżetu głównego i przypisanie go self.main_ window. W wierszach 12. i 13. znajduje się polecenie: self.label = tkinter.Label(self.main_window, text= Witaj, świecie! ) Poleć książkęKup książkę 632 Rozdział 13. Programowanie GUI Tworzy ono widżet Label i przypisuje go self.label. Pierwszym argumentem jest self.main_window, czyli odwołanie do widżetu głównego. To po prostu oznacza, że widżet Label ma należeć do widżetu głównego. Drugim argumentem jest text= Witaj, świecie! . To z kolei określa tekst, który ma zostać wyświetlony w etykiecie. Polecenie w wierszu 16. wywołuje metodę pack() widżetu Label. Jej działanie polega na ustaleniu miejsca umieszczenia widżetu, a następnie wyświetlenia go po utworzeniu okna głównego. (Tę metodę można wywołać dla każdego widżetu w oknie). Wiersz 19. zawiera wywołanie metody mainloop() modułu tkinter, która wyświetla okno główne programu pokazane na rysunku 13.5. Spójrz na kolejny przykład. Program przedstawiony na listingu 13.4 wyświetla okno wraz z dwoma widżetami Label, co pokazałem na rysunku 13.6. Listing 13.4 (hello_world2.py) 1 # Ten program wyświetla dwie etykiety wraz z tekstem. 2 3 import tkinter 4 5 class MyGUI: 6 def __init__(self): 7 # Utworzenie widżetu okna głównego. 8 self.main_window = tkinter.Tk() 9 10 # Utworzenie dwóch widżetów Label. 11 self.label1 = tkinter.Label(self.main_window, 12 text= Witaj, świecie! ) 13 self.label2 = tkinter.Label(self.main_window, 14 text= To jest program wraz z GUI. ) 15 16 # Wywołanie metody pack() w obu widżetach Label. 17 self.label1.pack() 18 self.label2.pack() 19 20 # Wejście do pętli głównej tkinter. 21 tkinter.mainloop() 22 23 # Utworzenie egzemplarza klasy MyGUI. 24 my_gui = MyGUI() Rysunek 13.6. Okno wyświetlone przez program z listingu 13.4 Zwróć uwagę na wyświetlenie dwóch widżetów Label, jeden po drugim. To ułożenie można zmienić za pomocą argumentu metody pack(). Przykład jego użycia pokaza- łem w programie na listingu 13.5. Po jego uruchomieniu zostanie wyświetlone okno, takie jak na rysunku 13.7. Poleć książkęKup książkę 13.3. Wyświetlanie tekstu za pomocą widżetu Label 633 Listing 13.5 (hello_world3.py) 1 # Ten program używa argumentu side= left metody 2 # pack(), aby zmienić układ ułożenia etykiet. 3 4 import tkinter 5 6 class MyGUI: 7 def __init__(self): 8 # Utworzenie widżetu okna głównego. 9 self.main_window = tkinter.Tk() 10 11 # Utworzenie dwóch widżetów Label. 12 self.label1 = tkinter.Label(self.main_window, 13 text= Witaj, świecie! ) 14 self.label2 = tkinter.Label(self.main_window, 15 text= To jest program wraz z GUI. ) 16 17 # Wywołanie metody pack() w obu widżetach Label. 18 self.label1.pack(side= left ) 19 self.label2.pack(side= left ) 20 21 # Wejście do pętli głównej tkinter. 22 tkinter.mainloop() 23 24 # Utworzenie egzemplarza klasy MyGUI. 25 my_gui = MyGUI() Rysunek 13.7. Okno wyświetlone przez program z listingu 13.5 W wierszach 18. i 19. znajdują się wywołania metod pack() obu widżetów Label wraz z argumentami side= Left . Ten argument określa, że widżet ma zostać dosu- nięty do lewej strony w widżecie nadrzędnym. Ponieważ widżet label1 został jako pierwszy dodany do main_window, będzie wyświetlony przy lewej krawędzi okna. Nato- miast widżet label2 został dodany jako drugi i dlatego jest wyświetlony po label1. W efekcie etykiety zostały wyświetlone obok siebie. Poprawne argumenty możliwe do przekazania metodzie pack() to side= top , side= bottom , side= left i side= right . Punkt kontrolny 13.8. Na czym polega działanie metody pack() widżetu? 13.9. Przyjmuję założenie o utworzeniu dwóch widżetów Label i wywołaniu ich metod pack() bez argumentów. Jak zostaną rozmieszczone te widżety? 13.10. Jaki argument trzeba przekazać metodzie pack() widżetu, aby nakazać jego wyrównanie do lewej strony wewnątrz widżetu nadrzędnego? Poleć książkęKup książkę 634 Rozdział 13. Programowanie GUI 13.4. Organizowanie widżetów przy użyciu kontenera Frame 13.4. Organizowanie widżetów przy użyciu kontenera Frame WYJAŚNIENIE. Frame to kontener przechowujący widżety. Kontenery te można wykorzystać do organizowania widżetów w oknie. Kontener Frame to rodzaj widżetu, który może przechowywać inne widżety. Kontener ten przydaje się do organizowania i aranżowania grup widżetów w oknie. Przykładowo zbiór widżetów można umieścić w jednym kontenerze Frame i rozmieścić w dowolny sposób, a następnie umieścić kolejny zbiór widżetów w innym kontenerze Frame i rozmieścić je w odmienny sposób. Takie rozwiązanie pokazałem w programie na listingu 13.6. Po jego uruchomieniu zobaczysz okno pokazane na rysunku 13.8. Listing 13.6 (frame_demo.py) 1 # Ten program tworzy etykiety w dwóch oddzielnych kontenerach. 2 3 import tkinter 4 5 class MyGUI: 6 def __init__(self): 7 # Utworzenie widżetu okna głównego. 8 self.main_window = tkinter.Tk() 9 10 # Utworzenie dwóch kontenerów w oknie, 11 # pierwszy na górze, a drugi pod nim. 12 self.top_frame = tkinter.Frame(self.main_window) 13 self.bottom_frame = tkinter.Frame(self.main_window) 14 15 # Utworzenie trzech widżetów Label 16 # w górnym kontenerze. 17 self.label1 = tkinter.Label(self.top_frame, 18 text= Winken ) 19 self.label2 = tkinter.Label(self.top_frame, 20 text= Blinken ) 21 self.label3 = tkinter.Label(self.top_frame, 22 text= Nod ) 23 24 # Ułożenie etykiet w górnym kontenerze. 25 # Za pomocą argumentu side= top zostały 26 # rozmieszczone pionowo jedna po drugiej. 27 self.label1.pack(side= top ) 28 self.label2.pack(side= top ) 29 self.label3.pack(side= top ) 30 31 # Utworzenie trzech widżetów Label 32 # w dolnym kontenerze. 33 self.label4 = tkinter.Label(self.bottom_frame, 34 text= Winken ) 35 self.label5 = tkinter.Label(self.bottom_frame, 36 text= Blinken ) 37 self.label6 = tkinter.Label(self.bottom_frame, 38 text= Nod ) Poleć książkęKup książkę 13.4. Organizowanie widżetów przy użyciu kontenera Frame 635 39 40 # Ułożenie etykiet w dolnym kontenerze. 41 # Za pomocą argumentu side= left zostały 42 # rozmieszczone poziomo jedna po drugiej. 43 self.label4.pack(side= left ) 44 self.label5.pack(side= left ) 45 self.label6.pack(side= left ) 46 47 # Tak, w kontenerze również konieczne jest wywołanie metody pack()! 48 self.top_frame.pack() 49 self.bottom_frame.pack() 50 51 # Wejście do pętli głównej tkinter. 52 tkinter.mainloop() 53 54 # Utworzenie egzemplarza klasy MyGUI. 55 my_gui = MyGUI() Rysunek 13.8. Okno wyświetlone przez program z listingu 13.6 Przyjrzyj się dokładnie poleceniom w wierszach 12. i 13. self.top_frame = tkinter.Frame(self.main_window) self.bottom_frame = tkinter.Frame(self.main_window) Polecenia te powodują utworzenie dwóch obiektów Frame. Argument self.main_window powoduje dodanie tych obiektów do widżetu main_window. W wierszach od 17. do 22. następuje utworzenie trzech widżetów Label. Zwróć uwagę na ich dodanie do widżetu self.top_frame. Następnie w wierszach od 27. do 29. mamy wywołanie metody pack() poszczególnych widżetów Label wraz z argu- mentem side= top . Jak pokazałem na rysunku 13.9, powoduje to pionowe roz- mieszczenie etykiet, jedna po drugiej, wewnątrz górnego kontenera Frame. Rysunek 13.9. Rozmieszczenie widżetów w programie z listingu 13.6 Poleć książkęKup książkę 636 Rozdział 13. Programowanie GUI W wierszach od 33. do 38. następuje utworzenie trzech kolejnych widżetów Label. Zwróć uwagę na ich dodanie do widżetu self.bottom_frame. Następnie w wier- szach od 43. do 45. mamy wywołanie metody pack() nowych widżetów Label wraz z argumentem side= left . Jak pokazałem na rysunku 13.9, powoduje to poziome rozmieszczenie etykiet, jedna po drugiej, wewnątrz dolnego kontenera Frame. W wierszach 48. i 49. następuje wywołanie metody pack() w obu kontenerach, co powoduje wyświetlenie widżetów Frame. Z kolei w wierszu 52. mamy wywołanie funkcji mainloop() modułu tkinter. 13.5. Widżet Button i informacyjne okna dialogowe 13.5. Widżet Button i informacyjne okna dialogowe WYJAŚNIENIE. Widżetu Button można użyć do utworzenia standardowego przy- cisku w oknie. Kliknięcie takiego przycisku przez użytkownika spowoduje wywołanie określonej funkcji lub metody. Informacyjne okno dialogowe to proste okno wyświetlające użytkownikowi komu- nikat wraz z przyciskiem OK pozwalającym na zamknięcie tego okna. Do wyświe- tlenia informacyjnego okna dialogowego można użyć funkcji showinfo() modułu tkinter.messagebox. Widżet Button może być kliknięty przez użytkownika i powoduje wówczas przepro- wadzenie pewnej operacji. Podczas tworzenia widżetu Button można zdefiniować tekst wyświetlany w przycisku i nazwę funkcji wywołania zwrotnego. Funkcja wywo- łania zwrotnego to funkcja lub metoda wywoływana po kliknięciu przycisku przez użytkownika. UWAGA. Funkcja wywołania zwrotnego jest określana także mianem procedury obsługi, ponieważ obsługuje zdarzenie występujące po kliknięciu przycisku. Spójrz na program przedstawiony na listingu 13.7. Jego działanie polega na wyświe- tleniu okna, które możesz zobaczyć na rysunku 13.10. Gdy użytkownik kliknie przy- cisk, program wyświetli oddzielne informacyjne okno dialogowe pokazane na rysunku 13.11. Do wyświetlenia tego okna wykorzystałem funkcję o nazwie showinfo() modułu tkinter.messagebox(). Aby użyć wymienionej funkcji, trzeba zaimportować moduł tkinter.messagebox. Oto ogólna postać wywołania funkcji showinfo(). tkinter.messagebox.showinfo(tytuł, komunikat) W tej ogólnej postaci tytuł to ciąg tekstowy wyświetlany w pasku tytułu okna dia- logowego, natomiast komunikat to informacyjny ciąg tekstowy wyświetlony w części głównej okna dialogowego. Poleć książkęKup książkę 13.5. Widżet Button i informacyjne okna dialogowe 637 Listing 13.7 (button_demo.py) 1 # Ten program pokazuje widżet Button. 2 # Po jego kliknięciu przez użytkownika 3 # zostanie wyświetlone informacyjne okno dialogowe. 4 5 import tkinter 6 import tkinter.messagebox 7 8 class MyGUI: 9 def __init__(self): 10 # Utworzenie widżetu okna głównego. 11 self.main_window = tkinter.Tk() 12 13 # Utworzenie widżetu Button. Tekst Kliknij mnie! 14 # powinien zostać wyświetlony na przycisku. Metoda 15 # do_something() będzie wywołana, gdy użytkownik 16 # kliknie ten widżet. 17 self.my_button = tkinter.Button(self.main_window, 18 text= Kliknij mnie! , 19 command=self.do_something) 20 21 # Wywołanie metody pack() widżetu. 22 self.my_button.pack() 23 24 # Wejście do pętli głównej tkinter. 25 tkinter.mainloop() 26 27 # Metoda do_something() to funkcja wywołania 28 # zwrotnego dla widżetu Button. 29 30 def do_something(self): 31 # Wyświetlenie informacyjnego okna dialogowego. 32 tkinter.messagebox.showinfo( Odpowiedź , 33 Dziękujemy za kliknięcie przycisku. ) 34 35 # Utworzenie egzemplarza klasy MyGUI. 36 my_gui = MyGUI() Rysunek 13.10. Okno główne wyświetlone przez program z listingu 13.7 Rysunek 13.11. Informacyjne okno dialogowe wyświetlone przez program z listingu 13.7 Poleć książkęKup książkę 638 Rozdział 13. Programowanie GUI W wierszu 5. został zaimportowany moduł tkinter, natomiast w wierszu 6. tkinter. messagebox. Z kolei w wierszu 11. mamy utworzenie widżetu głównego i przypisanie go zmiennej main_window. Polecenia w wierszach od 17. do 19. tworzą widżet Button. Pierwszym argumentem jest self.main_window, czyli widżet nadrzędny. Drugi argument, text= Kliknij mnie! , określa ciąg tekstowy, który ma zostać wyświetlony na przycisku. Trzeci argu- ment, command= self.do_something , wskazuje metodę do_something() klasy jako funkcję wywołania zwrotnego. Po kliknięciu przycisku przez użytkownika nastąpi wywołanie wymienionej funkcji. Metoda do_something() została zdefiniowana w wierszach od 31. do 33. Jej działa- nie polega na wywołaniu funkcji tkinter.messagebox.showinfo() i wyświetleniu informacyjnego okna dialogowego pokazanego na rysunku 13.11. Aby je zamknąć, należy kliknąć przycisk OK. Utworzenie przycisku zakończenia działania programu Programy wyposażone w graficzny interfejs użytkownika zwykle mają przycisk koń- czący działanie programu, którego kliknięcie powoduje zamknięcie aplikacji. Aby utworzyć taki przycisk w Pythonie, wystarczy zdefiniować widżet Button wywołujący jako funkcję wywołania zwrotnego metodę destroy() widżetu głównego. Program przedstawiony na listingu 13.8 pokazuje przykład takiego rozwiązania. Jest to zmodyfi- kowana wersja wcześniejszego programu, w której dodałem drugi widżet Button. Uru- chomiony program możesz zobaczyć na rysunku 13.12. Listing 13.8 (quit_button.py) 1 # Ten program ma przycisk kończący działanie aplikacji. 2 # Po kliknięciu przycisk wywołuje metodę destroy() klasy Tk. 3 4 import tkinter 5 import tkinter.messagebox 6 7 class MyGUI: 8 def __init__(self): 9 # Utworzenie widżetu okna głównego. 10 self.main_window = tkinter.Tk() 11 12 # Utworzenie widżetu Button. Tekst Kliknij mnie! 13 # powinien zostać wyświetlony na przycisku. Metoda 14 # do_something() będzie wywołana, gdy użytkownik 15 # kliknie ten widżet. 16 self.my_button = tkinter.Button(self.main_window, 17 text= Kliknij mnie! , 18 command=self.do_something) 19 20 # Utworzenie przycisku zamykającego program. Po jego kliknięciu 21 # nastąpi wywołanie metody destroy() widżetu głównego. 22 # (Zmienna main_window odwołuje się do widżetu głównego, 23 # więc funkcją wywołania zwrotnego jest self.main_window.destroy()). 24 self.quit_button = tkinter.Button(self.main_window, Poleć książkęKup książkę 13.6. Pobieranie danych wejściowych za pomocą widżetu Entry 639 25 text= Zakończ , 26 command=self.main_window.destroy) 27 28 29 # Wywołanie metody pack() widżetu. 30 self.my_button.pack() 31 self.quit_button.pack() 32 33 # Wejście do pętli głównej tkinter. 34 tkinter.mainloop() 35 36 # Metoda do_something() to funkcja wywołania 37 # zwrotnego dla widżetu Button. 38 39 def do_something(self): 40 # Wyświetlenie informacyjnego okna dialogowego. 41 tkinter.messagebox.showinfo( Odpowiedź , 42 Dziękujemy za kliknięcie przycisku. ) 43 44 # Utworzenie egzemplarza klasy MyGUI. 45 my_gui = MyGUI() Rysunek 13.12. Informacyjne okno dialogowe wyświetlone przez program z listingu 13.8 Polecenia w wierszach od 24. do 26. powodują utworzenie przycisku kończącego działanie programu. Zwróć uwagę na użycie metody self.main_window.destroy() w charakterze funkcji wywołania zwrotnego. Po kliknięciu tego przycisku zostaje wywołana wymieniona metoda i program kończy działanie. 13.6. Pobieranie danych wejściowych za pomocą widżetu Entry 13.6. Pobieranie danych wejściowych za pomocą widżetu Entry WYJAŚNIENIE. Widżet Entry to prostokątny obszar, w którym użytkownik może wprowadzić dane wejściowe. Metodę get() tego widżetu można wykorzystać do otrzymania wpisanych danych. Widżet Entry to prostokątny obszar, w którym użytkownik może wpisać tekst. Widżet jest używany do pobierania danych wejściowych w programach wyposażonych w GUI. Zwykle program będzie miał jeden lub więcej widżetów Entry w oknie i przycisk, którego kliknięcie spowoduje wysłanie wprowadzonych danych. Funkcja wywołania zwrotnego przycisku otrzymuje dane z okna zawierającego widżet Entry i przetwarza je. Poleć książkęKup książkę 640 Rozdział 13. Programowanie GUI Metodę get() widżetu Entry można wykorzystać do pobrania danych wprowadzo- nych przez użytkownika za pomocą tego widżetu. Wartością zwrotną metody get() jest ciąg tekstowy, więc dane muszą być skonwertowane na odpowiedni typ, jeśli widżet jest używany do pobrania danych liczbowych. Aby pokazać w praktyce omawiany widżet, przedstawię program pozwalający użyt- kownikowi na wpisanie wartości wyrażonej w kilometrach, która po kliknięciu przycisku zostanie skonwertowana na wartość w milach. Oto wzór pozwalający skonwertować kilometry na mile: mile = kilometry × 0,6214 Na rysunku 13.13 pokazałem okno wyświetlane przez omawiany program. Aby ułożyć widżety w sposób pokazany na rysunku, należy umieścić je w dwóch kontenerach Frame, tak jak pokazałem na rysunku 13.14. Etykieta i widżet Entry umieszczane są w kontenerze top_frame, a ich metody pack() będą wywoływane wraz z argumentem side= left . To spowoduje poziome ułożenie wymienionych elementów. Z kolei przyciski Konwertuj i Zakończ zostaną umieszczone w kontenerze bottom_frame, a ich metody pack() również będą wywoływane wraz z argumentem side= left . Rysunek 13.13. Okno programu kilo_converter.py Rysunek 13.14. Ułożenie widżetów za pomocą kontenerów Kod omawianego programu przedstawiłem na listingu 13.9. Na rysunku 13.15 możesz zobaczyć, co się stanie, gdy użytkownik wpisze w widżecie Entry liczbę 1000 i kliknie przycisk Konwertuj. Listing 13.9 (kilo_converter.py) 1 # Ten program konwertuje odległość wyrażoną w kilometrach 2 # na mile. Wynik zostanie wyświetlony 3 # w informacyjnym oknie dialogowym. 4 5 import tkinter 6 import tkinter.messagebox 7 8 class KiloConverterGUI: 9 def __init__(self): 10 11 # Utworzenie okna głównego. 12 self.main_window = tkinter.Tk() Poleć książkęKup książkę 13.6. Pobieranie danych wejściowych za pomocą widżetu Entry 641 13 14 # Utworzenie dwóch kontenerów do grupowania widżetów. 15 self.top_frame = tkinter.Frame(self.main_window) 16 self.bottom_frame = tkinter.Frame(self.main_window) 17 18 # Utworzenie widżetów w górnym kontenerze. 19 self.prompt_label = tkinter.Label(self.top_frame, 20 text= Podaj odległość w kilometrach: ) 21 self.kilo_entry = tkinter.Entry(self.top_frame, 22 width=10) 23 24 # Wywołanie metod pack() widżetów w górnym kontenerze. 25 self.prompt_label.pack(side= left ) 26 self.kilo_entry.pack(side= left ) 27 28 # Utworzenie widżetów Button w dolnym kontenerze. 29 self.calc_button = tkinter.Button(self.bottom_frame, 30 text= Konwertuj , 31 command=self.convert) 32 self.quit_button = tkinter.Button(self.bottom_frame, 33 text= Zakończ , 34 command=self.main_window.destroy) 35 # Wywołanie metody pack() przycisków. 36 self.calc_button.pack(side= left ) 37 self.quit_button.pack(side= left ) 38 39 # Wywołanie metody pack() kontenerów. 40 self.top_frame.pack() 41 self.bottom_frame.pack() 42 43 # Wejście do pętli głównej tkinter. 44 tkinter.mainloop() 45 46 # Metoda convert() jest funkcją wywołania 47 # zwrotnego przycisku Konwertuj. 48 49 def convert(self): 50 # Pobranie wartości wprowadzonej 51 # przez użytkownika w widżecie kilo_entry. 52 kilo = float(self.kilo_entry.get()) 53 54 # Konwersja kilometrów na mile. 55 miles = kilo * 0.6214 56 57 # Wyświetlenie wyniku w informacyjnym oknie dialogowym. 58 tkinter.messagebox.showinfo( Wynik , 59 str(kilo) + 60 kilometrów to + 61 str(miles) + mil. ) 62 63 # Utworzenie egzemplarza klasy KiloConverterGUI. 64 kilo_conv = KiloConverterGUI() Zdefiniowana w wierszach od 49. do 60. metoda convert() jest funkcją wywołania zwrotnego dla przycisku Konwertuj. Polecenie w wierszu 52. wywołuje metodę get() widżetu kilo_entry w celu pobrania danych wpisanych przez użytkownika. Dane zostają skonwertowane na wartość typu float i przypisane zmiennej kilo. Obliczenie Poleć książkęKup książkę 642 Rozdział 13. Programowanie GUI Rysunek 13.15. Informacyjne okno dialogowe wyświetlone przez program z listingu 13.9 mil odbywa się w wierszu 55., a wynik jest przypisywany zmiennej miles. Następnie polecenia w wierszach od 58. do 61. wyświetlają informacyjne okno dialogowe wraz ze skonwertowaną wartością. 13.7. Używanie etykiety jako elementu danych wyjściowych 13.7. Używanie etykiety jako elementu danych wyjściowych WYJAŚNIENIE. Gdy obiekt StringVal jest powiązany z widżetem Label, widżet ten wyświetla wszystkie dane przechowywane w wymienionym obiekcie. W poprzednim przykładzie zobaczyłeś, jak można użyć informacyjnego okna dialo- gowego do wyświetlenia danych wyjściowych. Jeżeli nie chcesz wyświetlać oddziel- nego okna dialogowego dla danych wyjściowych programu, zamiast niego możesz użyć widżetu Label w oknie głównym programu. Pozwala to na dynamiczne wyświetlanie danych wyjściowych programu. Wystarczy utworzyć pusty widżet Label w oknie głów- nym, a następnie przygotować kod wyświetlający w tej etykiecie żądane dane po klik- nięciu przycisku. Moduł tkinter oferuje klasę o nazwie StringVal, którą wraz z widżetem Label można wykorzystać do wyświetlania danych. Pierwszym krokiem jest utworzenie obiektu StringVar. Następnie trzeba opracować widżet Label i powiązać go z obiektem StringVal. Od tej chwili każda wartość przechowywana w obiekcie StringVal będzie automatycznie wyświetlana przez widżet Label. Zastosowanie takiego rozwiązania w praktyce pokazałem w programie na listingu 13.10. Jest to zmodyfikowana wersja programu kilo_converter.py z listingu 13.9. Zamiast wyświetlać wynik w informacyjnym oknie dialogowym, ta wersja programu wyświe- tla wynik w etykiecie znajdującej się w oknie głównym. Poleć książkęKup książkę 13.7. Używanie etykiety jako elementu danych wyjściowych 643 Listing 13.10 (kilo_converter2.py) 1 # Ten program konwertuje odległość wyrażoną w kilometrach 2 # na mile. Wynik zostanie 3 # wyświetlony w etykiecie okna głównego. 4 5 import tkinter 6 7 class KiloConverterGUI: 8 def __init__(self): 9 10 # Utworzenie okna głównego. 11 self.main_window = tkinter.Tk() 12 13 # Utworzenie trzech kontenerów do grupowania widżetów. 14 self.top_frame = tkinter.Frame() 15 self.mid_frame = tkinter.Frame() 16 self.bottom_frame = tkinter.Frame() 17 18 # Utworzenie widżetów w górnym kontenerze. 19 self.prompt_label = tkinter.Label(self.top_frame, 20 text= Podaj odległość w kilometrach: ) 21 self.kilo_entry = tkinter.Entry(self.top_frame, 22 width=10) 23 24 # Wywołanie metod pack() widżetów w górnym kontenerze. 25 self.prompt_label.pack(side= left ) 26 self.kilo_entry.pack(side= left ) 27 28 # Utworzenie widżetów w środkowym kontenerze. 29 self.descr_label = tkinter.Label(self.mid_frame, 30 text= Po konwersji na mile: ) 31 32 # Konieczne jest powiązanie obiektu StringVar z etykietą 33 # danych wyjściowych. Metoda set() obiektu będzie 34 # użyta do przechowywania pustego ciągu tekstowego. 35 self.value = tkinter.StringVar() 36 37 # Utworzenie etykiety i powiązanie jej 38 # z obiektem StringVar. Każda wartość 39 # przechowywana w tym obiekcie zostanie 40 # automatycznie wyświetlona w etykiecie. 41 self.miles_label = tkinter.Label(self.mid_frame, 42 textvariable=self.value) 43 44 # Wywołanie metod pack() widżetów w środkowym kontenerze. 45 self.descr_label.pack(side= left ) 46 self.miles_label.pack(side= left ) 47 48 # Utworzenie widżetów Button w dolnym kontenerze. 49 self.calc_button = tkinter.Button(self.bottom_frame, 50 text= Konwertuj , 51 command=self.convert) 52 self.quit_button = tkinter.Button(self.bottom_frame, 53 text= Zakończ , 54 command=self.main_window.destroy) 55 56 # Wywołanie metody pack() przycisków. 57 self.calc_button.pack(side= left ) 58 self.quit_button.pack(side= left ) Poleć książkęKup książkę 644 Rozdział 13. Programowanie GUI 59 60 # Wywołanie metody pack() kontenerów. 61 self.top_frame.pack() 62 self.mid_frame.pack() 63 self.bottom_frame.pack() 64 65 # Wejście do pętli głównej tkinter. 66 tkinter.mainloop() 67 68 # Metoda convert() jest funkcją wywołania 69 # zwrotnego przycisku Konwertuj. 70 71 def convert(self): 72 # Pobranie wartości wprowadzonej 73 # przez użytkownika w widżecie kilo_entry. 74 kilo = float(self.kilo_entry.get()) 75 76 # Konwersja kilometrów na mile. 77 miles = kilo * 0.6214 78 79 # Konwersja wartości miles na postać ciągu tekstowego 80 # i umieszczenie jej w obiekcie StringVal. To spowoduje 81 # automatyczne uaktualnienie widżetu miles_label. 82 self.value.set(miles) 83 84 # Utworzenie egzemplarza klasy KiloConverterGUI. 85 kilo_conv = KiloConverterGUI() Po uruchomieniu tego programu zostanie wyświetlone okno pokazane na rysunku 13.16. Z kolei na rysunku 13.17 pokazałem, co się stanie, gdy użytkownik wpisze w widżecie Entry liczbę 1000 i kliknie przycisk Konwertuj. Skonwertowana wartość w milach zostanie wyświetlona w etykiecie w oknie głównym. Rysunek 13.16. Okno wyświetlone po uruchomieniu programu Rysunek 13.17. Okno pokazujące wartość 1000 kilometrów skonwertowaną na mile Spójrz na kod źródłowy omawianego programu. W wierszach od 14. do 16. nastę- puje utworzenie trzech kontenerów: top_frame, mid_frame i bottom_frame. Następnie w wierszach od 19. do 26. tworzone są widżety dla górnego kontenera i zostają wywo- łane ich metody pack(). Poleć książkęKup książkę 13.7. Używanie etykiety jako elementu danych wyjściowych 645 W wierszach 29. i 30. znajduje się polecenie tworzące widżet Label wraz z tekstem Po konwersji na mile, który możesz zobaczyć w oknie głównym na rysunku 13.16. Następnie w wierszu 35. zostaje utworzony obiekt StringVal przypisywany zmiennej value. W wierszu 41. jest opracowywany widżet Label o nazwie miles_label prze- znaczony do wyświetlania wartości skonwertowanej na mile. Zwróć uwagę na użycie w wierszu 42. argumentu textvariable=self.value. Powoduje on powstanie powiąza- nia między widżetem Label i obiektem StringVar, do którego odwołuje się zmienna value. Każda wartość przechowywana przez obiekt StringVal zostanie wyświetlona w etykiecie. W wierszach 45. i 46. następuje wywołanie metod pack() widżetów Label umieszczo- nych w kontenerze mid_frame. Z kolei w wierszach od 49. do 58. są tworzone widżety Button i wywoływane ich metody pack(). Następnie w wierszach od 61. do 63. mamy wywołanie metod pack() kontenerów. Na rysunku 13.18 pokazałem ułożenie różnych widżetów w trzech kontenerach w oknie omawianego programu. Rysunek 13.18. Układ okna głównego programu kilo_converter2.py Zdefiniowana w wierszach od 71. do 82. metoda convert() jest funkcją wywołania zwrotnego dla przycisku Konwertuj. Polecenie w wierszu 74. wywołuje metodę get() widżetu kilo_entry, aby pobrać dane wprowadzone przez użytkownika. Zostają one skonwertowane na wartość typu float przypisywaną później zmiennej kilo. Obli- czenia w wierszu 77. przeprowadzają konwersję i przypisują jej wynik zmiennej miles. Polecenie w wierszu 82. wywołuje metodę set() obiektu StringVar wraz z argu- mentem miles. Powoduje to umieszczenie w obiekcie StringVal wartości wskazy- wanej przez zmienną miles i wyświetlenie tej wartości przez widżet miles_label. W centrum uwagi Utworzenie programu z GUI Kasia uczy w szkole biologii. W rozdziale 3. prześledziliśmy proces tworzenia pro- gramu, za pomocą którego uczniowie Kasi mogą obliczać średni wynik z trzech spraw- dzianów. Program prosił ucznia o podanie wyniku z każdego sprawdzianu, a następnie wyświetlał średni wynik. Kasia poprosiła Cię, abyś tym razem opracował program wyposażony w GUI, który będzie wykonywał tę samą operację. Kasia chce, aby w oknie programu znajdowały się trzy pola tekstowe, w których będzie można wpisać wyniki ze sprawdzianów, i przycisk, po którego kliknięciu wyświetli się średni wynik. Na samym początku musimy naszkicować okno programu — przedstawiłem je na rysunku 13.19. Na szkicu widoczne są także typy widżetów (ponumerowanie ich ułatwi przygotowanie listy). Poleć książkęKup książkę 646 Rozdział 13. Programowanie GUI Rysunek 13.19. Szkic okna budowanego programu Na podstawie szkicu możemy sporządzić listę potrzebnych widżetów. Opracowując przedstawioną w następującej tabeli listę, dodamy także krótki opis każdego wi- dżetu i nazwę, jaką mu nadamy podczas tworzenia okna. Numer widżetu na rysunkach od 13.13 do 13.19 1 2 3 4 5 6 7 8 9 10 Typ widżetu Opis Label Label Label Label Entry Entry Entry Label Button Button Prosi użytkownika o podanie wyniku ze sprawdzianu nr 1 Prosi użytkownika o podanie wyniku ze sprawdzianu nr 2 Prosi użytkownika o podanie wyniku ze sprawdzianu nr 3 Średnia z podanych sprawdzianów W tym miejscu użytkownik podaje wynik ze sprawdzianu nr 1 W tym miejscu użytkownik podaje wynik ze sprawdzianu nr 2 W tym miejscu użytkownik podaje wynik ze sprawdzianu nr 3 W tej etykiecie program wyświetli średni wynik z podanych sprawdzianów Kliknięcie tego przycisku powoduje obliczenie średniego wyniku ze sprawdzianów i wyświetlenie go w etykiecie avg_label Kliknięcie tego przycisku powoduje zakończenie działania programu Nazwa test1_label test2_label test3_label result_label test1_entry test2_entry test3_entry avg_label calc_button quit_button Poleć książkęKup książkę 13.7. Używanie etykiety jako elementu danych wyjściowych 647 Na podstawie szkicu widzisz, że program zawiera pięć wierszy widżetów. Aby je zorgani- zować, wykorzystamy pięć kontenerów Frame. Na rysunku 13.20 pokazałem sposób rozmieszczenia tych widżetów w pięciu kontenerach Frame. Rysunek 13.20. Użycie kontenerów Frame do rozmieszczenia widżetów w oknie programu Kod źródłowy omawianego programu przedstawiłem na listingu 13.11. Z kolei na rysunku 13.21 pokazałem okno programu wraz z danymi wprowadzonymi przez użytkownika. Listing 13.11 (test_averages.py) 1 # Ten program używa GUI do pobrania wyników 2 # z trzech sprawdzianów i wyświetlenia ich średniej. 3 4 import tkinter 5 6 class TestAvg: 7 def __init__(self): 8 # Utworzenie okna głównego. 9 self.main_window = tkinter.Tk() 10 11 # Utworzenie pięciu kontenerów. 12 self.test1_frame = tkinter.Frame(self.main_window) 13 self.test2_frame = tkinter.Frame(self.main_window) 14 self.test3_frame = tkinter.Frame(self.main_window) 15 self.avg_frame = tkinter.Frame(self.main_window) 16 self.button_frame = tkinter.Frame(self.main_window) 17 18 # Utworzenie widżetów dla kontenera sprawdzianu nr 1 i wywołanie ich metod pack(). 19 self.test1_label = tkinter.Label(self.test1_frame, 20 text= Podaj wynik ze sprawdzianu nr 1: ) 21 self.test1_entry = tkinter.Entry(self.test1_frame, 22 width=10) 23 self.test1_label.pack(side= left ) 24 self.test1_entry.pack(side= left ) 25 26 # Utworzenie widżetów dla kontenera sprawdzianu nr 2 i wywołanie ich metod pack(). 27 self.test2_label = tkinter.Label(self.test2_frame, 28 text= Podaj wynik ze sprawdzianu nr 2: ) 29 self.test2_entry = tkinter.Entry(self.test2_frame, 30 width=10) Poleć książkęKup książkę 648 Rozdział 13. Programowanie GUI 31 self.test2_label.pack(side= left ) 32 self.test2_entry.pack(side= left ) 33 34 # Utworzenie widżetów dla kontenera sprawdzianu nr 3 i wywołanie ich metod pack(). 35 self.test3_label = tkinter.Label(self.test3_frame, 36 text= Podaj wynik ze sprawdzianu nr 3: ) 37 self.test3_entry = tkinter.Entry(self.test3_frame, 38 width=10) 39 self.test3_label.pack(side= left ) 40 self.test3_entry.pack(side= left ) 41 42 # Utworzenie widżetów dla kontenera wyświetlającego średnią i wywołanie ich metod pack(). 43 self.result_label = tkinter.Label(self.avg_frame, 44 text= Średnia: ) 45 self.avg = tkinter.StringVar() # Aby uaktualnić widżet avg_label. 46 self.avg_label = tkinter.Label(self.avg_frame, 47 textvariable=self.avg) 48 self.result_label.pack(side= left ) 49 self.avg_label.pack(side= left ) 50 51 # Utworzenie widżetów dla kontenera przycisków i wywołanie ich metod pack(). 52 self.calc_button = tkinter.Button(self.button_frame, 53 text= Średnia , 54 command=self.calc_avg) 55 self.quit_button = tkinter.Button(self.button_frame, 56 text= Zakończ , 57 command=self.main_window.destroy) 58 self.calc_button.pack(side= left ) 59 self.quit_button.pack(side= left ) 60 61 # Wywołanie metody pack() kontenerów. 62 self.test1_frame.pack() 63 self.test2_frame.pack() 64 self.test3_frame.pack() 65 self.avg_frame.pack() 66 self.button_frame.pack() 67 68 # Wywołanie metody mainloop() modułu tkinter. 69 tkinter.mainloop() 70 71 # Metoda calc_avg() jest funkcją wywołania 72 # zwrotnego dla widżetu calc_button. 73 74 def calc_avg(self): 75 # Pobranie wyników z trzech sprawdzianów 76 # i umieszczenie ich w zmiennych. 77 self.test1 = float(self.test1_entry.get()) 78 self.test2 = float(self.test2_entry.get()) 79 self.test3 = float(self.test3_entry.get()) 80 81 # Obliczenie średniego wyniku. 82 self.average = (self.test1 + self.test2 + 83 self.test3) / 3.0 84 85 # Uaktualnienie widżetu avg_label przez umieszczenie 86 # wartości zmiennej self.average w obiekcie StringVar 87 # wskazywanym przez avg. 88 self.avg.set(self.average) Poleć książkęKup książkę 13.8. Przycisk opcji i pole wyboru 649 89 90 # Utworzenie egzemplarza klasy TestAvg. 91 test_avg = TestAvg() Rysunek 13.21. Okno programu test_averages.py Punkt kontrolny 13.11. Jak można pobrać dane z widżetu Entry? 13.12. Jaki typ ma wartość pobrana z widżetu Entry? 13.13. W jakim module została zdefiniowana klasa StringVar? 13.14. Jaki efekt można osiągnąć przez powiązanie obiektu StringVar z widżetem Label? 13.8. Przycisk opcji i pole wyboru 13.8. Przycisk opcji i pole wyboru WYJAŚNIENIE. Zwykle przyciski opcji używane są w grupach składających się z co najmniej dwóch takich przycisków i pozwalają użytkow- nikowi na wybór jednej z wielu możliwych opcji. Z kolei pole wyboru może być stosowane samodzielnie lub w grupie i pozwala użytkownikowi na wybór typu tak-nie lub włączony-wyłączony. Przycisk opcji Przycisk opcji okazuje się użyteczny, gdy użytkownik ma mieć możliwość wyboru jednej z wielu dostępnych opcji. Na rysunku 13.22 pokazałem przykładowe okno zawierające grupę przycisków opcji. Taki przycisk może być zaznaczony lub nie. Każdy przycisk opcji ma małą kropkę pojawiającą się w środku, gdy dany przycisk opcji został zaznaczony. Z kolei niezaznaczony przycisk opcji wydaje się być pusty. Do tworzenia widżetu Radiobutton używana jest klasa o takiej samej nazwie zdefinio- wana w module tkinter. W danej chwili tylko jeden widżet Radiobutton w kontenerze, Poleć książkęKup książkę 650 Rozdział 13. Programowanie GUI Rysunek 13.22. Grupa przycisków opcji takim jak Frame, może być zaznaczony. Kliknięcie widżetu Radiobutton powoduje zaznaczenie wskazanego przycisku opcji i jednocześnie automatycznie usuwa zazna- czenie z każdego innego przycisku opcji w tym samym kontenerze. Skoro tylko jeden widżet Radiobutton może być w danej chwili zaznaczony w kontenerze, mówimy, że te widżety są wzajemnie wykluczające się. UWAGA. Nazwa przycisk opcji (ang. radio button) odwołuje się do starych odbior- ników radiowych zawierających wciskane przyciski przeznaczone do wyboru stacji. W danej chwili mógł być wciśnięty tylko jeden przycisk. Po naciśnięciu wybra- nego przycisku dotychczas wybrany zostawał automatycznie wysunięty. Moduł tkinter dostarcza klasę o nazwie IntVar, która może być używana wraz z wid
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Python dla zupełnie początkujących. Owoce programowania. Wydanie IV
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: