Izradite vlastiti program za web preglednik i desktop snimač pomoću PyGobject - 3. dio
Ovo je 3. dio serije o stvaranju GUI aplikacija ispod Linux radne površine pomoću PyGObject. Danas ćemo razgovarati o korištenju nekih naprednih Python modula i knjižnica u našim programima poput ' os ', ' WebKit ', ' zahtjeva ' i drugi, uz neke druge korisne informacije za programiranje.
Morate odavde proći sve ove prethodne dijelove serije da biste nastavili daljnje upute o stvaranju dodatnih aplikacija:
- Stvorite GUI aplikacije na Linux radnoj površini pomoću PyGObject - 1. dio
- Stvaranje naprednih PyGobject aplikacija na Linuxu - 2. dio
Moduli i knjižnice u Pythonu vrlo su korisni, umjesto da pišete mnoge potprograme za obavljanje nekih složenih poslova koji će vam trebati puno vremena i posla, možete ih jednostavno uvesti! Da, samo uvezite potrebne module i biblioteke u svoj program i moći ćete uštedjeti puno vremena i truda da dovršite svoj program.
Postoje mnogi poznati moduli za Python, koje možete pronaći na Python Module Index.
Možete uvesti i knjižnice za svoj Python program, iz " gi.repository import Gtk " ovaj redak uvozi GTK biblioteku u program Python, postoje mnoge druge knjižnice poput Gdk, WebKit .. itd.
Stvaranje naprednih GUI aplikacija
Danas ćemo stvoriti 2 programa:
- Jednostavan web preglednik; koja će koristiti biblioteku WebKit.
- Stoni snimač pomoću naredbe ‘avconv’; koji će koristiti modul ‘os’ iz Pythona.
Od sada neću objašnjavati kako povući i ispustiti widgete u dizajneru Glade , već ću vam reći samo ime widgeta koje trebate stvoriti, a dodatno ću vam dati .glade datoteka za svaki program, a sigurno i Python datoteka.
Da bismo stvorili web preglednik, morat ćemo upotrijebiti mehanizam " WebKit ", koji je mehanizam za generiranje otvorenog koda za web, isti je koji se koristi u Chrome / Chromium , za više informacija o njemu možete se obratiti službenom web mjestu Webkit.org.
Prvo ćemo morati stvoriti GUI, otvoriti dizajner Glade i dodati sljedeće widgete. Za više informacija o tome kako stvoriti widgete, slijedite 1. dio i 2. dio ove serije (gore navedene veze).
- Izradite widget "window1".
- Izradite widget "box1" i "box2".
- Izradite widget "button1" i "button2".
- Izradite widget ‘entry1’.
- Stvorite widget "scrollwindow1".
Nakon izrade dodataka dobit ćete sljedeće sučelje.
Nema ništa novo, osim widgeta " Pomaknuti prozor "; ovaj je widget važan kako bi se omogućilo ugrađivanje mehanizma WebKit u njega, pomoću widgeta "Pomaknuti prozor " moći ćete se pomicati vodoravno i okomito dok pregledavati web stranice.
Morat ćete dodati obrađivač " backbutton_clicked " u signal "kliknuto " gumba Natrag , " refreshbutton_clicked " obrađivač za gumb za osvježavanje " kliknuti signal " i " enterkey_clicked " obrađivač za signal " aktiviran " za unos.
Kompletna datoteka .glade za sučelje je ovdje.
<?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.16.1 --> <interface> <requires lib="gtk+" version="3.10"/> <object class="GtkWindow" id="window1"> <property name="can_focus">False</property> <property name="title" translatable="yes">Our Simple Browser</property> <property name="window_position">center</property> <property name="default_width">1000</property> <property name="default_height">600</property> <property name="icon_name">applications-internet</property> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkBox" id="box2"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkButton" id="button1"> <property name="label">gtk-go-back</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="relief">half</property> <property name="use_stock">True</property> <property name="always_show_image">True</property> <signal name="clicked" handler="backbutton_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="button2"> <property name="label">gtk-refresh</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="relief">half</property> <property name="use_stock">True</property> <property name="always_show_image">True</property> <signal name="clicked" handler="refreshbutton_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkEntry" id="entry1"> <property name="visible">True</property> <property name="can_focus">True</property> <signal name="activate" handler="enterkey_clicked" swapped="no"/> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="scrolledwindow1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">always</property> <property name="shadow_type">in</property> <child> <placeholder/> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface>
Sada kopirajte gornji kod i zalijepite ga u datoteku " ui.glade " u svojoj matičnoj mapi. Sada stvorite novu datoteku pod nazivom " mywebbrowser.py " i u nju unesite sljedeći kôd, a sve objašnjenje nalazi se u komentarima.
#!/usr/bin/python # -*- coding: utf-8 -*- ## Here we imported both Gtk library and the WebKit engine. from gi.repository import Gtk, WebKit class Handler: def backbutton_clicked(self, button): ## When the user clicks on the Back button, the '.go_back()' method is activated, which will send the user to the previous page automatically, this method is part from the WebKit engine. browserholder.go_back() def refreshbutton_clicked(self, button): ## Same thing here, the '.reload()' method is activated when the 'Refresh' button is clicked. browserholder.reload() def enterkey_clicked(self, button): ## To load the URL automatically when the "Enter" key is hit from the keyboard while focusing on the entry box, we have to use the '.load_uri()' method and grab the URL from the entry box. browserholder.load_uri(urlentry.get_text()) ## Nothing new here.. We just imported the 'ui.glade' file. builder = Gtk.Builder() builder.add_from_file("ui.glade") builder.connect_signals(Handler()) window = builder.get_object("window1") ## Here's the new part.. We created a global object called 'browserholder' which will contain the WebKit rendering engine, and we set it to 'WebKit.WebView()' which is the default thing to do if you want to add a WebKit engine to your program. browserholder = WebKit.WebView() ## To disallow editing the webpage. browserholder.set_editable(False) ## The default URL to be loaded, we used the 'load_uri()' method. browserholder.load_uri("https://linux-console.net") urlentry = builder.get_object("entry1") urlentry.set_text("https://linux-console.net") ## Here we imported the scrolledwindow1 object from the ui.glade file. scrolled_window = builder.get_object("scrolledwindow1") ## We used the '.add()' method to add the 'browserholder' object to the scrolled window, which contains our WebKit browser. scrolled_window.add(browserholder) ## And finally, we showed the 'browserholder' object using the '.show()' method. browserholder.show() ## Give that developer a cookie ! window.connect("delete-event", Gtk.main_quit) window.show_all() Gtk.main()
Spremite datoteku i pokrenite je.
$ chmod 755 mywebbrowser.py $ ./mywebbrowser.py
I ovo ćete dobiti.
Možete potražiti službenu dokumentaciju WebKitGtk kako biste otkrili više mogućnosti.
U ovom ćemo odjeljku naučiti kako pokretati lokalne sistemske naredbe ili skripte ljuske iz datoteke Python pomoću modula ' os ', što će nam pomoći da stvorimo jednostavan snimač zaslona za radnu površinu pomoću naredba ' avconv '.
Otvorite Glade dizajner i stvorite sljedeće widgete:
- Izradite widget "window1".
- Izradite widget "box1".
- Izradite widgete "button1", "button2" i "button3".
- Izradite widget ‘entry1’.
Nakon stvaranja gore navedenih widgeta, dobit ćete sučelje ispod.
Evo kompletne datoteke ui.glade .
<?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.16.1 --> <interface> <requires lib="gtk+" version="3.10"/> <object class="GtkWindow" id="window1"> <property name="can_focus">False</property> <property name="title" translatable="yes">Our Simple Recorder</property> <property name="window_position">center</property> <property name="default_width">300</property> <property name="default_height">30</property> <property name="icon_name">applications-multimedia</property> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> <property name="can_focus">False</property> <child> <object class="GtkEntry" id="entry1"> <property name="visible">True</property> <property name="can_focus">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="button1"> <property name="label">gtk-media-record</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_stock">True</property> <property name="always_show_image">True</property> <signal name="clicked" handler="recordbutton" swapped="no"/> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="button2"> <property name="label">gtk-media-stop</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_stock">True</property> <property name="always_show_image">True</property> <signal name="clicked" handler="stopbutton" swapped="no"/> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkButton" id="button3"> <property name="label">gtk-media-play</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="use_stock">True</property> <property name="always_show_image">True</property> <signal name="clicked" handler="playbutton" swapped="no"/> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> </object> </child> </object> </interface>
Kao i obično, kopirajte gornji kod i zalijepite ga u datoteku " ui.glade " u svom početnom direktoriju, stvorite novu datoteku " myrecorder.py " i unesite sljedeće koda unutar njega (Svaki novi redak objašnjen je u komentarima).
#!/usr/bin/python # -*- coding: utf-8 -*- ## Here we imported both Gtk library and the os module. from gi.repository import Gtk import os class Handler: def recordbutton(self, button): ## We defined a variable: 'filepathandname', we assigned the bash local variable '$HOME' to it + "/" + the file name from the text entry box. filepathandname = os.environ["HOME"] + "/" + entry.get_text() ## Here exported the 'filepathandname' variable from Python to the 'filename' variable in the shell. os.environ["filename"] = filepathandname ## Using 'os.system(COMMAND)' we can execute any shell command or shell script, here we executed the 'avconv' command to record the desktop video & audio. os.system("avconv -f x11grab -r 25 -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -i :0.0 -vcodec libx264 -threads 4 $filename -y & ") def stopbutton(self, button): ## Run the 'killall avconv' command when the stop button is clicked. os.system("killall avconv") def playbutton(self, button): ## Run the 'avplay' command in the shell to play the recorded file when the play button is clicked. os.system("avplay $filename &") ## Nothing new here.. We just imported the 'ui.glade' file. builder = Gtk.Builder() builder.add_from_file("ui.glade") builder.connect_signals(Handler()) window = builder.get_object("window1") entry = builder.get_object("entry1") entry.set_text("myrecording-file.avi") ## Give that developer a cookie ! window.connect("delete-event", Gtk.main_quit) window.show_all() Gtk.main()
Sada pokrenite datoteku primjenom sljedećih naredbi u terminalu.
$ chmod 755 myrecorder.py $ ./myrecorder.py
I dobili ste svoj prvi stoni snimač.
Više informacija o modulu os možete pronaći u biblioteci Python OS.
I to je to, stvaranje aplikacija za radnu površinu Linuxa nije teško koristiti PyGObject , samo trebate stvoriti GUI, uvesti neke module i povezati Python datoteku s GUI, ni više, ni manje. Mnogo je korisnih vodiča o tome na web mjestu PyGObject:
Jeste li probali stvoriti programe pomoću PyGObject-a? Što mislite o tome? Koje ste programe već razvijali?