Python-GTK Antes de nada tienes que tener instalado python-gtk, si no recuerdo mal se debe instalar de una forma parecida a esta
sudo apt install python-gtk2 -y
Cualquier apliación que quieras hacer con esta librería debería tener una estructura parecida a esta, si no te fías de esta información siempre puedes recurrir a la documentación https://python-gtk-3-tutorial.readthedocs.io/en/latest/
#!/usr/bin/python import gi class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="GTKyou2mp3") win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()
Vale ya tenemos la estructura o «el molde» de nuestra aplicación, vamos a meterle elementos para que parezca una ventana, como véis en la imagen de abajo, cada botón, que queramos meter en nuestra aplicación necesita ser declarado , como quien dice botón, dice entrada de texto, label, imagen, etc. En este caso es un botón y en ejemplo nos enseñan a «construirlo». Es posible que no quieras saber nada sobre la POO y te la sude saber que es «self», pero no te preocupes, tampoco es tan importante en programación dirigida a eventos.
self.button = Gtk.Button(label="Click Here")
Lo importante después de entender este sencillo concepto es «conectar», conectar eventos a funciones. Dicho de otra forma, cuando el usuario hace «un click» mi programa tiene que saber donde hizo click y que tiene que hacer cuando eso ocurra.
self.button.connect("clicked", self.on_button_clicked)
Vale tío, pero este programa de ejemplos que ponen no sirve para nada, solo va a hacer un print de «Hello World» cuando alguien pulse el botón y para más inri lo hace en la consola. Efectivamente, estos ejemplos son la base para empezar a escribir tus propias mierdas, como GUIs chiquititas que poco a poco se hagan mierdas incluso aún más grandes, del tamaño elefante.
Por ejemplo un día que estaban poniendo música en un canal de discord, con un bot y algunos temas de la música que estaban poniendo me estaban gustando y deseaba descargar algunos de ellos, pero me pareció muy tedioso usar youtube-dl, hay que tener en cuenta que esos bots usan enlaces de youtube para ponerte las canciones, así que me…. Bueno mejor le doy 10 puntos al primero que le de uso y me diga si le sirvió de algo.
#written by foo@disroot.org under GPLv3 License #!/usr/bin/python import gi import re from os import system gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk class MyWindow(Gtk.Window): def __init__(self): #change this to your own path self.converted_path = "~/music/" Gtk.Window.__init__(self, title="GTKyou2mp3") self.set_default_size(800, 0) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) self.add(self.box) self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.format = "mp3" # adding components self.url_entry = Gtk.Entry() self.box.pack_start(self.url_entry, True, True, 0) self.button1 = Gtk.Button(label="Convert") self.button1.connect("clicked", self.on_button_convert_clicked) self.box.pack_start(self.button1, True, True, 0) # box for radio_buttons self.radio_button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) self.radio_button1 = Gtk.RadioButton.new_with_label_from_widget(None, "mp3") self.radio_button1.connect("toggled", self.on_selected) self.radio_button2 = Gtk.RadioButton.new_with_label_from_widget(self.radio_button1, "ogg") self.radio_button_box.add(self.radio_button1) self.radio_button2.connect("toggled", self.on_selected) self.radio_button_box.add(self.radio_button2) self.box.pack_start(self.radio_button_box, True, True, 0) actual_clip = self.clipboard.wait_for_text() if actual_clip is not None: self.url_entry.set_text(self.find_url(actual_clip)) def find_url(self, string): url = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\), ]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', string) if len(url) > 0: return(str(url[0])) else: return "" def on_button_convert_clicked(self, widget): url = self.url_entry.get_text() command = "youtube-dl -o '" + self.converted_path +"%(title)s.%(ext)s' --extract-audio --audio-format " + self.format + " " + url print(command) system(command) def on_selected(self, widget, data=None): format = widget.get_label() if format == "ogg": self.format = "vorbis" if format == "mp3": self.format = "mp3" win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()
Bonito es mejor que feo. Simple es mejor que complejo, complejo mejor que complicado. Python Rocks.