64 lines
2.1 KiB
Python
Executable File
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()
|