Zadání Diplomové Práce
Total Page:16
File Type:pdf, Size:1020Kb
Zadání diplomové práce Název: Python GUI: Tkinter API pro Qt Student: Bc. Matěj Schuh Vedoucí: Ing. Miroslav Hrončok Studijní program: Informatika Obor / specializace: Webové a softwarové inženýrství, zaměření Softwarové inženýrství Katedra: Katedra softwarového inženýrství Platnost zadání: do konce letního semestru 2021/2022 Pokyny pro vypracování Analyzujte API knihovny Tkinter ze standardní knihovny jazyka Python. Analyzujte API frameworku Qt a jeho nadstaveb pro jazyk Python (PyQt, PySide). Analyzujte možnosti, jak mapovat Tkinter API na GUI komponenty frameworku Qt. Navrhněte implementaci těch možností, které dávají smysl. Navrhněte kvantifikátory pro měření úspěšnosti mapování Tkinter API na GUI komponenty frameworku Qt. Zvolte jednu z možností implementace a implementujte prototyp jako knihovnu pro Python pod permisivní svobodnou licencí. Součástí implementace musí být automatické testy a anglická dokumentace. Implementaci otestujte na aplikaci Python IDLE podle definovaných kvantifikátorů. Elektronicky schválil/a Ing. Michal Valenta, Ph.D. dne 24. února 2020 v Praze. Diplomov´apr´ace Python GUI: Tkinter API pro Qt Bc. MatˇejSchuh Katedra softwarov´ehoinˇzen´yrstv´ı Vedouc´ıpr´ace:Ing. Miroslav Hronˇcok 6. kvˇetna2021 Podˇekov´an´ı Na tomto m´ıstˇebych chtˇelpˇrednostnˇepodˇekovat sv´emu vedouc´ımu Ing. Mi- roslavu Hronˇcokovi, kter´ymi vˇzdypomohl s implementac´ı,n´avrhemi smˇerem m´eDiplomov´epr´ace.D´alebych chtˇelpodˇekovat rodinˇea pˇr´atel˚um,kteˇr´ımi byli bˇehemzpracov´av´an´ıoporou. Prohl´aˇsen´ı Prohlaˇsuji,ˇzejsem pˇredloˇzenoupr´acivypracoval samostatnˇea ˇzejsem uvedl veˇsker´epouˇzit´einformaˇcn´ızdroje v souladu s Metodick´ympokynem o dodrˇzo- v´an´ıetick´ych princip˚upˇripˇr´ıpravˇevysokoˇskolsk´ych z´avˇereˇcn´ych prac´ı. Beru na vˇedom´ı,ˇzese na moji pr´acivztahuj´ıpr´ava a povinnosti vypl´yvaj´ıc´ı ze z´akona ˇc.121/2000 Sb., autorsk´ehoz´akona, ve znˇen´ıpozdˇejˇs´ıch pˇredpis˚u. V souladu s ust. § 2373 odst. 2 z´akona ˇc.89/2012 Sb., obˇcansk´yz´akon´ık,ve znˇen´ıpozdˇejˇs´ıch pˇredpis˚u,t´ımto udˇelujinev´yhradn´ıopr´avnˇen´ı(licenci) k uˇzit´ı t´etomoj´ıpr´ace,a to vˇcetnˇevˇsech poˇc´ıtaˇcov´ych program˚u,jeˇzjsou jej´ısouˇc´ast´ı ˇcipˇr´ılohoua veˇsker´ejejich dokumentace (d´alesouhrnnˇejen D´ılo“), a to ” vˇsemosob´am,kter´esi pˇrej´ıD´ılouˇz´ıt.Tyto osoby jsou opr´avnˇeny D´ılouˇz´ıt jak´ymkoli zp˚usobem, kter´ynesniˇzujehodnotu D´ılaa za jak´ymkoli ´uˇcelem (vˇcetnˇeuˇzit´ık v´ydˇeleˇcn´ym´uˇcel˚um).Toto opr´avnˇen´ıje ˇcasovˇe,teritori´alnˇe i mnoˇzstevnˇeneomezen´e.Kaˇzd´aosoba, kter´avyuˇzijev´yˇseuvedenou licenci, se vˇsakzavazuje udˇelitke kaˇzd´emu d´ılu,kter´evznikne (byt’ jen zˇc´asti)na z´akladˇeD´ıla, ´upravou D´ıla,spojen´ımD´ılas jin´ymd´ılem,zaˇrazen´ımD´ıla do d´ılasouborn´ehoˇcizpracov´an´ımD´ıla(vˇcetnˇepˇrekladu)licenci alespoˇn ve v´yˇseuveden´emrozsahu a z´aroveˇnzpˇr´ıstupnitzdrojov´yk´odtakov´ehod´ıla alespoˇnsrovnateln´ymzp˚usobem a ve srovnateln´emrozsahu, jako je zpˇr´ıstupnˇen zdrojov´yk´odD´ıla. V Praze dne 6. kvˇetna2021 . .. .. .. .. .. .. Cesk´evysok´euˇcen´ıtechnick´evˇ Praze Fakulta informaˇcn´ıch technologi´ı c 2021 MatˇejSchuh. Vˇsechna pr´ava vyhrazena. Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Cesk´emvysok´emuˇcen´ıˇ technick´em v Praze, Fakultˇeinformaˇcn´ıchtechnologi´ı.Pr´ace je chr´anˇenapr´avn´ımipˇredpisy a mezin´arodn´ımi´umluvamio pr´avuautorsk´ema pr´avech souvisej´ıc´ıchs pr´avem autorsk´ym.K jej´ımuuˇzit´ı,s v´yjimkoubez´uplatn´ychz´akonn´ychlicenc´ıa nad r´amec opr´avnˇen´ıuveden´ychv Prohl´aˇsen´ına pˇredchoz´ıstranˇe,je nezbytn´y souhlas autora. Odkaz na tuto pr´aci Schuh, Matˇej. Python GUI: Tkinter API pro Qt. Diplomov´apr´ace. Praha: Cesk´evysok´euˇcen´ıtechnick´evˇ Praze, Fakulta informaˇcn´ıch technologi´ı,2021. Dostupn´ytak´ez WWW: hhttps://github.com/SohajCZ/dumpTki. Abstrakt Tato Diplomov´apr´aceje zamˇeˇrenana tvorbu grafick´ehouˇzivatelsk´ehorozhran´ı v jazyce Python. Grafick´erozhran´ıvyuˇz´ıvaj´ıgrafick´ych moˇznost´ıpoˇc´ıtaˇc˚ua dalˇs´ıch zaˇr´ızen´ıch pro zjednoduˇsen´ıkomunikace mezi poˇc´ıtaˇcem a uˇzivatelem, d´ıkyˇcemuˇzm˚uˇzeb´ytpoˇc´ıtaˇcovl´ad´ani m´enˇezkuˇsen´ymuˇzivatelem. Teoretick´aˇc´astpr´aceje vˇenov´anavlastn´ımu grafick´emu rozhran´ıa jeho komponent˚um,s d˚urazemna moˇznostiimplementace grafick´ehorozhran´ıv pro- gramovac´ımjazyku Python, pomoc´ıknihovny Tkinter, vyuˇz´ıvaj´ıc´ıTk kompo- nenty, nebo bal´ıˇckyPyQt a PySide, vyuˇz´ıvaj´ıc´ıch komponenty z frameworku Qt. C´ılempraktick´eˇc´astije anal´yzaa n´avrhˇreˇsen´ı,kter´eby umoˇzniloaplikac´ım pouˇz´ıvaj´ıc´ımknihovnu Tkinter vyuˇz´ıvat k vykreslen´ıgrafick´ehorozhran´ıkom- ponenty z frameworku Qt. K navrˇzen´emu ˇreˇsen´ıje implementov´anprototyp, na kter´emje zhodnocena ´uspˇeˇsnostn´avrhu. Pr´aceposkytuje pˇrehledo moˇznostech grafick´ehouˇzivatelsk´eho rozhran´ı, jeho stavebn´ıch prvc´ıch a o jeho moˇznostech implementace v Pythonu. Pr´ace m˚uˇze b´ytpˇr´ınosn´anejen pro ty, kteˇr´ıse chtˇejidozvˇedˇetv´ıceo vnitˇrn´ıch funkc´ıch a z´avislostech Tkinteru, PyQt a PySide, ale rovnˇeˇztˇem,kter´ymnevyhovuj´ı k tvoˇren´ırozhran´ıTk komponenty, ale chtˇej´ızachovat moˇznosti programov´an´ı pomoc´ıTkinteru. Kl´ıˇcov´a slova API, GUI, PyQt, Python, Qt, Tcl, Tk, Tkinter vii Abstract This diploma thesis is focused on the creation of graphics Python user interface. Graphical interfaces are using graphical capabilities of computers to simplify communication between the computer and the user, making it possible the computer is controlled even by a less experienced user. The theoretical part of the work is devoted to graphical interface and its components, with emphasis on the possibility of implementing a graphical interface in the Python programming language, using the Tkinter library with Tk components or PyQt and PySide bindings using components from the Qt framework. The aim of the practical part is the analysis and design of solution, which would allow applications using the Tkinter library to draw a graphical interface components from the Qt framework. To the designed solution is then prototype implemented and evaluated. This diploma thesis provides an overview of the possibilities of graphical user interface, its components and its implementation options in Python. The work can be beneficial not only for those who seek how Tkinter, PyQt or PySide work internally, but also for those that don’t like to create an interface with Tk components, but want maintain programming capabilities of Tkinter library. Keywords API, GUI, PyQt, Python, Qt, Tcl, Tk, Tkinter viii Obsah Uvod´ 1 1 C´ıl pr´ace 3 2 Teoretick´a ˇc´ast 5 2.1 Python . 5 2.2 Interaktivn´ıpˇr´ıstup. 6 2.3 GUI . 6 2.3.1 Komponenty GUI . 6 2.3.2 Interakce . 8 2.3.3 Sada n´astroj˚u. 8 2.4 Tkinter . 10 2.4.1 Tcl/Tk . 11 2.5 PyQt, PySide . 12 2.5.1 Qt . 12 2.5.2 PyQt . 13 2.5.3 PySide . 13 2.5.4 Rozd´ılyPyQt a PySide . 13 2.6 Srovn´an´ı. 14 2.7 Motivace . 15 3 Analyza´ 19 3.1 Tkinter . 19 3.1.1 Spr´avci rozloˇzen´ı . 19 3.1.2 Standardn´ıatributy . 20 3.1.3 Ud´alosti . 21 3.1.4 Modul ttk . 22 3.1.5 Dialogy . 23 3.2 PyQt . 23 3.2.1 QWidget . 24 ix 3.2.2 Ud´alosti. 24 3.2.3 Moˇznostizobrazen´ıwidget˚u. 25 3.2.4 Management rozloˇzen´ıwidget˚u. 26 3.2.5 Dialogy . 27 3.3 PySide . 27 4 N´avrh 29 4.1 Mapov´an´ı . 29 4.1.1 High-level rozhran´ı . 29 4.1.2 Mapov´an´ıv niˇzˇs´ıch ´urovn´ıch . 30 4.1.3 Mapov´an´ıv r˚uzn´ych ´urovn´ıch . 31 4.1.4 Vybran´yzp˚usob mapov´an´ı. 32 4.2 N´avrhkvantifik´ator˚u. 33 5 Realizace 35 5.1 Struktura repozit´aˇre . 35 5.2 Qtinter . 35 5.3 Implementer . 37 5.4 Pˇrekladud´alost´ı . 39 5.5 Podpora ud´alost´ı . 39 5.6 Dialog pro nahr´an´ısouboru . 40 5.7 Layouter . 40 5.8 QtCore konstanty . 42 5.9 Mapov´an´ıparametr˚u. 42 5.10 Pˇrekladdle mapov´an´ı- tktoqt . 43 6 Testov´an´ı a zhodnocen´ı 45 6.1 Regresn´ıtestov´an´ı . 45 6.2 Otestov´an´ıs aplikac´ıIDLE . 46 6.3 Zhodnocen´ıdle kvantifik´ator˚u. 47 Z´avˇer 49 Literatura 51 A Seznam pouˇzitych´ zkratek 55 B Obsah pˇriloˇzen´eho CD 57 x Seznam obr´azk˚u 4.1 Mapov´an´ıv niˇzˇs´ıch ´urovn´ıch . 30 4.2 Hello world program . 32 4.3 N-tice vygenerovan´eprogramem Hello world . 32 5.1 Struktura repozit´aˇre . 36 5.2 Uk´azkamapovac´ıch struktur . 44 xi Uvod´ Tato Diplomov´apr´aceje zamˇeˇrenana tvorbu grafick´ehouˇzivatelsk´ehorozhran´ı v jazyce Python. Grafick´erozhran´ıvyuˇz´ıvaj´ıgrafick´ych moˇznost´ıpoˇc´ıtaˇc˚ua dalˇs´ıch zaˇr´ızen´ıch pro zjednoduˇsen´ıkomunikace mezi poˇc´ıtaˇcem a uˇzivatelem, d´ıkyˇcemuˇzm˚uˇzeb´ytpoˇc´ıtaˇcovl´ad´ani m´enˇezkuˇsen´ymuˇzivatelem. Teoretick´aˇc´astt´etoDiplomov´epr´acese vˇenuje obecnˇepojmu grafick´eho uˇzivatelsk´ehorozhran´ı(GUI), popisuje jeho komponenty a moˇznosti interakce s uˇzivatelem. D´aleteoretick´aˇc´astpr´acepopisuje nutn´epojmy souvisej´ıc´ı s tvorbou GUI, souˇcasnˇes pˇredstaven´ımexistuj´ıc´ıch sad n´astroj˚u,jako jsou Tk a Qt, knihovny Tkinter a bal´ıˇckyPyQt a PySide pro programovac´ıjazyk Python. Tyto n´astroje a bal´ıˇckyteoretick´aˇc´astdetailnˇepopisuje a mezi sebou vz´ajemnˇesrovn´av´a.Teoretick´aˇc´astje zakonˇcenashrnut´ımmotivace ke zpracov´an´ıtohoto t´ematu. Praktick´aˇc´astt´etoDiplomov´epr´acese vˇenuje implementaci n´astroje, kter´yby umoˇznilaplikac´ımnapsan´ympomoc´ıknihovny Tkinter vyuˇz´ıvat komponenty ze sady n´astroj˚uQt m´ıstosady Tk. Praktick´aˇc´astse dˇel´ına ˇctyˇri ˇc´asti– anal´yzu,n´avrh,realizaci a testov´an´ı. Anal´yzase bl´ıˇzevˇenuje knihovnˇeTkinter a bal´ıˇck˚um PyQt a PySide. Prob´ır´adetailnˇespr´avce rozloˇzen´ı,ud´alosti,dialogy a dalˇs´ımfunkce GUI. C´astˇ n´avrhu je vˇenov´anan´avrh˚ummapov´an´ı,pomoc´ıkter´ych by mˇelo b´ytdosaˇzeno c´ılepr´ace.Navrˇzen´amapov´an´ıTkinteru na Qt komponenty jsou zkoum´any z hlediska navrˇzen´ych parametr˚u,dle kter´ych dojde k v´ybˇerumapovan´ıpro implementaci.