Advertisement
egor230

Настройка чувствительности мыши rival 3

Apr 7th, 2025 (edited)
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.52 KB | Source Code | 0 0
  1. import json, subprocess, threading, sys
  2. from PyQt5.QtCore import Qt  # Оставлено как было
  3. from PyQt5.QtGui import QCloseEvent  # Оставлено как было
  4. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QComboBox, QSlider  # Оставлено как было
  5.  
  6. class MouseController(QWidget):
  7.   _mutex = threading.Lock()  # Глобальный мьютекс на уровне класса
  8.   def __init__(self):
  9.     super().__init__()
  10.     self.settings_file = "mouse_settings_for_rival.json"
  11.     # [Добавлено] Сохраняем исходные значения по умолчанию
  12.     self.default_color = 'white'
  13.     self.default_sensitivity = 800
  14.     if self.check_settings_file():  # Проверяем наличие файла
  15.       self.load_settings()  # Загружаем настройки только если файл существует
  16.     else:
  17.       self.current_color = self.default_color  # Используем сохранённые значения по умолчанию
  18.       self.current_sensitivity = self.default_sensitivity
  19.     self.initUI()
  20.  
  21.   def load_settings(self):# Загрузка настроек из JSON файла
  22.     try:
  23.       with open(self.settings_file, 'r') as f:
  24.         settings = json.load(f)
  25.         # [Изменено] Используем сохранённые значения по умолчанию как fallback
  26.         self.current_color = settings.get('color', self.default_color)
  27.         self.current_sensitivity = settings.get('sensitivity', self.default_sensitivity)
  28.         print("Настройки успешно загружены из файла")
  29.     except Exception as ex1:
  30.      pass
  31.  
  32.   def check_settings_file(self):# Проверка существования файла настроек
  33.     try:
  34.       with open(self.settings_file, 'r') as f:
  35.         return True
  36.     except Exception as ex1:
  37.      pass
  38.  
  39.   def save_settings(self):# Сохранение настроек в JSON файл
  40.     settings = {
  41.       'color': self.color_combo.currentText(),
  42.       'sensitivity': self.sensitivity_slider.value()
  43.     }
  44.     # [Добавлено] Проверяем, отличаются ли значения от исходных
  45.     if (settings['color'] != self.default_color or
  46.             settings['sensitivity'] != self.default_sensitivity):
  47.       with open(self.settings_file, 'w') as f:
  48.         json.dump(settings, f)
  49.  
  50.   def initUI(self):# Настройка графического интерфейса
  51.     self.setWindowTitle('Mouse Controller')
  52.     layout = QVBoxLayout()
  53.  
  54.     self.color_label = QLabel('Select Color:')
  55.     self.color_combo = QComboBox()
  56.     self.color_combo.addItems(["black", "red", "green", "blue", "yellow", "white"])
  57.     self.color_combo.setCurrentText(self.current_color)
  58.     self.color_combo.currentIndexChanged.connect(self.on_color_change)
  59.  
  60.     # [Изменено] Убрано eventFilter, добавлен сигнал entered
  61.     self.color_combo.view().entered.connect(self.on_color_hover)  # Наведение на элемент
  62.  
  63.     self.sensitivity_label = QLabel(f'Sensitivity: {self.current_sensitivity}')
  64.     self.sensitivity_slider = QSlider(Qt.Horizontal)
  65.     self.sensitivity_slider.setMinimum(500)
  66.     self.sensitivity_slider.setMaximum(1500)
  67.     self.sensitivity_slider.setValue(self.current_sensitivity)
  68.     self.sensitivity_slider.valueChanged.connect(self.on_sensitivity_change)
  69.  
  70.     layout.addWidget(self.color_label)
  71.     layout.addWidget(self.color_combo)
  72.     layout.addWidget(self.sensitivity_label)
  73.     layout.addWidget(self.sensitivity_slider)
  74.  
  75.     self.setLayout(layout)
  76.     self.setGeometry(300, 300, 300, 150)
  77.     self.show()
  78.  
  79.   # [Удалено] Метод eventFilter полностью удалён
  80.  
  81.   def set_mouse_color(self, color: str):  # Установка цвета подсветки мыши с помощью rivalcfg
  82.     color_params = ["--strip-top-color", "--strip-middle-color",
  83.                     "--strip-bottom-color", "--logo-color"]
  84.     try:
  85.      with self._mutex:  # Контекстный менеджер — автоматически захватывает и отпускает мьютекс
  86.       for param in color_params:
  87.         t = threading.Thread(target=subprocess.run, args=(["rivalcfg", param, color],), kwargs={'check': True})
  88.         t.start()
  89.         t.join()  # Ждём завершения каждой команды
  90.         print(f"Цвет подсветки мыши установлен на {color}")
  91.     except Exception as ex1:
  92.       pass
  93.   # [Добавлено] Новый метод для обработки наведения
  94.   def on_color_hover(self, index):# Обработка наведения на элемент списка
  95.     color = self.color_combo.itemText(index.row())
  96.     self.color_label.setText(f'Preview: {color}')  # Лёгкое действие вместо set_mouse_color
  97.  
  98.     t = threading.Thread(target=self.set_mouse_color, args=(color,))
  99.     t.start()
  100.     # t.join()  # Ждём завершения для предпросмотра
  101.   def on_color_change(self):# Обработка изменения выбранного цвета
  102.     color = self.color_combo.currentText()
  103.  
  104.     t = threading.Thread(target=self.set_mouse_color, args=(color,))
  105.     t.start()
  106.     t.join()  # Ждём завершения для предпросмотра
  107.   def on_sensitivity_change(self):  # Обработка изменения значения чувствительности
  108.     value = self.sensitivity_slider.value()  # Получение текущего значения ползунка
  109.     self.sensitivity_label.setText(f'Sensitivity: {value}')  # Обновление метки
  110.     try:
  111.       subprocess.run(['rivalcfg', '--sensitivity', str(value)], check=True)
  112.       print(f"Чувствительность мыши установлена на {value}")
  113.     except Exception as ex1:
  114.       pass
  115.  
  116.   def closeEvent(self, event: QCloseEvent):  # Обработка события закрытия окна
  117.     self.save_settings()  # Сохраняем текущие настройки перед закрытием
  118.     event.accept()  # Подтверждаем закрытие окна
  119.  
  120. if __name__ == '__main__':
  121.   app = QApplication(sys.argv)  # Создание приложения
  122.   ex = MouseController()  # Создание экземпляра интерфейса
  123.   sys.exit(app.exec_())  # Запуск основного цикла приложения
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement