dotfiles/.config/waybar/scripts/volume_menu.py
2025-05-28 18:27:10 +02:00

64 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
from gi.repository import AppIndicator3
from gi.repository import Gtk, GLib, GObject
import gi
import subprocess
import psutil
import sys
import os
gi.require_version("Gtk", "3.0")
class VolumeSlider(Gtk.Window):
def __init__(self):
super().__init__(title="Control de Volumen")
self.set_default_size(50, 300) # Tamaño de la ventana ajustado
# Crear el control deslizante vertical
self.slider = Gtk.Scale(orientation=Gtk.Orientation.VERTICAL)
self.slider.set_range(0, 100) # Rango de 0 a 100 para el volumen
self.slider.set_value(self.get_current_volume())
# Invertir para que vaya de abajo hacia arriba
self.slider.set_inverted(True)
self.slider.connect("value-changed", self.on_volume_changed)
# Ajustar el ancho del control deslizante
self.slider.set_size_request(30, -1) # Establece el ancho a 30 píxeles
# Añadir el control deslizante a la ventana
self.add(self.slider)
def get_current_volume(self):
"""Obtiene el volumen actual usando pamixer"""
result = subprocess.run(
["pamixer", "--get-volume"], capture_output=True, text=True)
# Default al 50%
return int(result.stdout.strip()) if result.returncode == 0 else 50
def on_volume_changed(self, slider):
"""Ajusta el volumen según la posición del control deslizante"""
volume = int(slider.get_value())
subprocess.run(["pamixer", "--set-volume", str(volume)])
def is_another_instance_running():
"""Comprueba si hay otra instancia de este script en ejecución"""
current_pid = os.getpid()
for process in psutil.process_iter(attrs=['pid', 'cmdline']):
if process.info['pid'] != current_pid and 'volume_slider.py' in process.info['cmdline']:
return True
return False
if __name__ == "__main__":
if is_another_instance_running():
print("Ya hay una instancia ejecutándose. Finalizando esta.")
sys.exit()
# Ejecutar la aplicación
win = VolumeSlider()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()