Now sundpood loads dynamically with launcher
This commit is contained in:
parent
5da8d2ad88
commit
942832999e
6 changed files with 1234 additions and 0 deletions
42
data/keys.py
Normal file
42
data/keys.py
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
|
||||||
|
forbidden = [
|
||||||
|
'Key.esc', 'Key.cmd', 'Key.cmd_r', 'Key.menu',
|
||||||
|
'Key.pause', 'Key.scroll_lock', 'Key.print_screen',
|
||||||
|
'Key.enter', 'Key.space', 'Key.backspace', 'Key.ctrl_l',
|
||||||
|
'Key.ctrl_r', 'Key.alt_l', 'Key.alt_gr', 'Key.caps_lock',
|
||||||
|
'Key.num_lock', 'Key.tab', 'Key.shift', 'Key.shift_r',
|
||||||
|
'Key.insert', 'Key.delete', 'Key.home', 'Key.end',
|
||||||
|
'Key.page_up', 'Key.page_down', '/'
|
||||||
|
]
|
||||||
|
|
||||||
|
dict_ = {
|
||||||
|
' ':' ',
|
||||||
|
'Key.f1' : 'F1',
|
||||||
|
'Key.f2' : 'F2',
|
||||||
|
'Key.f3' : 'F3',
|
||||||
|
'Key.f4' : 'F4',
|
||||||
|
'Key.f5' : 'F5',
|
||||||
|
'Key.f6' : 'F6',
|
||||||
|
'Key.f7' : 'F7',
|
||||||
|
'Key.f8' : 'F8',
|
||||||
|
'Key.f9' : 'F9',
|
||||||
|
'Key.f10' : 'F10',
|
||||||
|
'Key.f11' : 'F11',
|
||||||
|
'Key.f12' : 'F12',
|
||||||
|
'<96>' : 'Num 0',
|
||||||
|
'<97>' : 'Num 1',
|
||||||
|
'<98>' : 'Num 2',
|
||||||
|
'<99>' : 'Num 3',
|
||||||
|
'<100>' : 'Num 4',
|
||||||
|
'<101>' : 'Num 5',
|
||||||
|
'<102>' : 'Num 6',
|
||||||
|
'<103>' : 'Num 7',
|
||||||
|
'<104>' : 'Num 8',
|
||||||
|
'<105>' : 'Num 9',
|
||||||
|
'<110>' : 'Num .',
|
||||||
|
'Key.up' : 'Up',
|
||||||
|
'Key.down' : 'Down',
|
||||||
|
'Key.left' : 'Left',
|
||||||
|
'Key.right' : 'Right',
|
||||||
|
'\\\\' : '\\'
|
||||||
|
}
|
536
data/main.py
Normal file
536
data/main.py
Normal file
|
@ -0,0 +1,536 @@
|
||||||
|
#\ SundPood version 0201 /#
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
from time import time
|
||||||
|
import pygame as pg
|
||||||
|
import sounddevice as sd
|
||||||
|
from pynput.keyboard import Listener
|
||||||
|
from cryptography.fernet import Fernet
|
||||||
|
from PyQt5 import QtWidgets, QtGui, QtCore
|
||||||
|
from PyQt5.QtCore import QFile, QTextStream
|
||||||
|
from PyQt5.QtWidgets import QApplication
|
||||||
|
from data import ui_preferences
|
||||||
|
from data import ui_hotkeys
|
||||||
|
from data import ui_sundpood
|
||||||
|
from data import ui_overlay
|
||||||
|
from data import keys
|
||||||
|
import themes
|
||||||
|
import key
|
||||||
|
|
||||||
|
|
||||||
|
###! UI !###
|
||||||
|
class OverlayUi(QtWidgets.QMainWindow, ui_overlay.Ui_MainWindow):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
|
||||||
|
self.setGeometry(QtCore.QRect(0, 0, 250, 20))
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
def keyPressEvent(self, e):
|
||||||
|
if e.key() == QtCore.Qt.Key_F1:
|
||||||
|
self.hide()
|
||||||
|
win.show()
|
||||||
|
|
||||||
|
class PreferencesUi(QtWidgets.QMainWindow, ui_preferences.Ui_MainWindow):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
def mousePressEvent(self, event):
|
||||||
|
self.offset = event.pos()
|
||||||
|
|
||||||
|
def mouseMoveEvent(self, event):
|
||||||
|
x = event.globalX()
|
||||||
|
y = event.globalY()
|
||||||
|
x_w = self.offset.x()
|
||||||
|
y_w = self.offset.y()
|
||||||
|
self.move(x-x_w, y-y_w)
|
||||||
|
|
||||||
|
def closeEvent(self, event):
|
||||||
|
save()
|
||||||
|
|
||||||
|
class HotkeysUi(QtWidgets.QMainWindow, ui_hotkeys.Ui_MainWindow):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
def mousePressEvent(self, event):
|
||||||
|
self.offset = event.pos()
|
||||||
|
|
||||||
|
def mouseMoveEvent(self, event):
|
||||||
|
x = event.globalX()
|
||||||
|
y = event.globalY()
|
||||||
|
x_w = self.offset.x()
|
||||||
|
y_w = self.offset.y()
|
||||||
|
self.move(x-x_w, y-y_w)
|
||||||
|
|
||||||
|
class MainUi(QtWidgets.QMainWindow, ui_sundpood.Ui_MainWindow):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
|
||||||
|
self.setupUi(self)
|
||||||
|
self.volume_slider.valueChanged[int].connect(change_volume)
|
||||||
|
|
||||||
|
def mousePressEvent(self, event):
|
||||||
|
self.offset = event.pos()
|
||||||
|
|
||||||
|
def mouseMoveEvent(self, event):
|
||||||
|
try:
|
||||||
|
x = event.globalX()
|
||||||
|
y = event.globalY()
|
||||||
|
x_w = self.offset.x()
|
||||||
|
y_w = self.offset.y()
|
||||||
|
self.move(x-x_w, y-y_w)
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def keyPressEvent(self, e):
|
||||||
|
if e.key() == QtCore.Qt.Key_F1:
|
||||||
|
pref.close()
|
||||||
|
self.hide()
|
||||||
|
over.show()
|
||||||
|
|
||||||
|
def closeEvent(self, event):
|
||||||
|
save()
|
||||||
|
if os.path.exists('.play'):
|
||||||
|
os.remove('.play')
|
||||||
|
hotk.close()
|
||||||
|
pref.close()
|
||||||
|
|
||||||
|
|
||||||
|
###! JSON !###
|
||||||
|
def jsonread(file):
|
||||||
|
'''
|
||||||
|
Чтение JSON файла file
|
||||||
|
file - имя JSON файла, может содержать полный или относительный путь
|
||||||
|
'''
|
||||||
|
with open(file, "r", encoding='utf-8') as read_file:
|
||||||
|
data = json.load(read_file)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def jsonwrite(file, data):
|
||||||
|
'''
|
||||||
|
Запись в JSON файл file данные data
|
||||||
|
file - имя JSON файла, может содержать полный или относительный путь
|
||||||
|
data - данные, может быть словарем/списком/кортежем/строкой/числом
|
||||||
|
'''
|
||||||
|
with open(file, 'w', encoding='utf-8') as write_file:
|
||||||
|
write_file.write(json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
###! FUNCTIONS !###
|
||||||
|
def toggle_stylesheet(path):
|
||||||
|
'''
|
||||||
|
Toggle the stylesheet to use the desired path in the Qt resource
|
||||||
|
system (prefixed by `:/`) or generically (a path to a file on
|
||||||
|
system).
|
||||||
|
|
||||||
|
:path: A full path to a resource or file on system
|
||||||
|
'''
|
||||||
|
|
||||||
|
# get the QApplication instance, or crash if not set
|
||||||
|
app = QApplication.instance()
|
||||||
|
if app is None:
|
||||||
|
raise RuntimeError("No Qt Application found.")
|
||||||
|
|
||||||
|
path = os.path.join('themes', path)
|
||||||
|
file = QFile(path)
|
||||||
|
file.open(QFile.ReadOnly | QFile.Text)
|
||||||
|
stream = QTextStream(file)
|
||||||
|
theme = stream.readAll()
|
||||||
|
|
||||||
|
pref.setStyleSheet(theme)
|
||||||
|
win.setStyleSheet(theme)
|
||||||
|
hotk.setStyleSheet(theme)
|
||||||
|
|
||||||
|
def find_device():
|
||||||
|
'''
|
||||||
|
Ищем устройство device и возвращаем его индекс
|
||||||
|
'''
|
||||||
|
|
||||||
|
list_ = list(sd.query_devices()) # Список устройств вывода звука
|
||||||
|
device = ["CABLE Input (VB-Audio Virtual Cable)",
|
||||||
|
"VoiceMeeter Input (VB-Audio VoiceMeeter VAIO)"]# Имя искомого устройства
|
||||||
|
|
||||||
|
msg = QtWidgets.QMessageBox() # Окно ошибки (Устройство не найдено)
|
||||||
|
msg.setIcon(QtWidgets.QMessageBox.Critical)
|
||||||
|
msg.setText("You don't install VoiceMeeter")
|
||||||
|
msg.setInformativeText('install VoiceMetter from "redist" folder or download it from \nvb-audio.com/Voicemeeter')
|
||||||
|
msg.setWindowTitle('Error')
|
||||||
|
|
||||||
|
for i in list_:
|
||||||
|
for d in device:
|
||||||
|
if d in i['name']:
|
||||||
|
return i['name']
|
||||||
|
|
||||||
|
msg.exec_()
|
||||||
|
exit()
|
||||||
|
|
||||||
|
def get_files(dir_, config):
|
||||||
|
'''
|
||||||
|
Сбор всех аудифайлов
|
||||||
|
dir_ - Путь к папке со звуками
|
||||||
|
config - Имя файла настроек
|
||||||
|
'''
|
||||||
|
msg = QtWidgets.QMessageBox() # Окно ошибки (Не найдены файлы в папке 'sound')
|
||||||
|
msg.setIcon(QtWidgets.QMessageBox.Critical)
|
||||||
|
msg.setText("You don't have any sounds in 'sound' folder")
|
||||||
|
msg.setInformativeText('download sound in .wav / .mp3 / .m4a format')
|
||||||
|
msg.setWindowTitle('Error')
|
||||||
|
|
||||||
|
if os.path.exists(dir_):
|
||||||
|
if len(os.listdir(dir_)) == 0:
|
||||||
|
msg.exec_()
|
||||||
|
|
||||||
|
sounds = [] # Все аудио файлы
|
||||||
|
sounds_list = [f'{dir_}\\'] # Начальная категория
|
||||||
|
|
||||||
|
for i in os.listdir(dir_):
|
||||||
|
if os.path.isfile(os.path.join(dir_, i)):
|
||||||
|
name = os.path.join(dir_, i)
|
||||||
|
if name == None:
|
||||||
|
sounds_list.append(i)
|
||||||
|
elif os.path.splitext(i)[1] in ['.mp3', '.m4a', '.wav']:
|
||||||
|
sounds_list.append(i)
|
||||||
|
else:
|
||||||
|
sounds_list_cat = [os.path.join(dir_, i)]
|
||||||
|
for x in os.listdir(os.path.join(dir_, i)):
|
||||||
|
if os.path.isfile(os.path.join(dir_, i, x)):
|
||||||
|
if name == None:
|
||||||
|
sounds_list_cat.append(x)
|
||||||
|
elif os.path.splitext(x)[1] in ['.mp3', '.m4a', '.wav']:
|
||||||
|
sounds_list_cat.append(x)
|
||||||
|
sounds.append(sounds_list_cat)
|
||||||
|
sounds.append(sounds_list)
|
||||||
|
|
||||||
|
if os.path.exists(config):
|
||||||
|
hotkeys = jsonread(config)['hotkeys']
|
||||||
|
theme = jsonread(config)['Theme']
|
||||||
|
KEYS_CMD = jsonread(config)['KEYS_CMD']
|
||||||
|
sounds_list = { 'hotkeys':hotkeys,
|
||||||
|
'sounds':sounds,
|
||||||
|
'Theme':theme,
|
||||||
|
'KEYS_CMD':KEYS_CMD}
|
||||||
|
else:
|
||||||
|
sounds_list = { 'hotkeys':{},
|
||||||
|
'sounds':sounds,
|
||||||
|
'Theme':'None',
|
||||||
|
'KEYS_CMD':{
|
||||||
|
'select_move_up' :' ',# вверх
|
||||||
|
'select_move_down' :' ',# вниз
|
||||||
|
'select_move_left' :' ',# влево
|
||||||
|
'select_move_right' :' ',# вправо
|
||||||
|
'play_sound' :' ',# Играть
|
||||||
|
'stop_sound' :' ',# Остановить
|
||||||
|
}}
|
||||||
|
|
||||||
|
jsonwrite(config, sounds_list)
|
||||||
|
else:
|
||||||
|
sounds_list = { 'hotkeys':{},
|
||||||
|
'sounds':'',
|
||||||
|
'Theme':'None',
|
||||||
|
'KEYS_CMD':{
|
||||||
|
'select_move_up' :' ',# вверх
|
||||||
|
'select_move_down' :' ',# вниз
|
||||||
|
'select_move_left' :' ',# влево
|
||||||
|
'select_move_right' :' ',# вправо
|
||||||
|
'play_sound' :' ',# Играть
|
||||||
|
'stop_sound' :' ',# Остановить
|
||||||
|
}}
|
||||||
|
jsonwrite(config, sounds_list)
|
||||||
|
os.mkdir(dir_)
|
||||||
|
msg.exec_()
|
||||||
|
|
||||||
|
def change_volume(value):
|
||||||
|
pg.mixer.music.set_volume(value/100)
|
||||||
|
|
||||||
|
def play_sound(*argv):
|
||||||
|
if False in argv:
|
||||||
|
try:
|
||||||
|
sound = os.path.join(win.soundList.item(0).text(),
|
||||||
|
win.soundList.currentItem().text())
|
||||||
|
except AttributeError:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
sound = argv[0]
|
||||||
|
try:
|
||||||
|
pg.mixer.music.load(sound)
|
||||||
|
pg.mixer.music.play()
|
||||||
|
pg.event.wait()
|
||||||
|
except RuntimeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def cat_select(cat):
|
||||||
|
win.soundList.clear()
|
||||||
|
for i in menu:
|
||||||
|
if 'sound' + cat == i[0]:
|
||||||
|
win.soundList.addItems(i)
|
||||||
|
|
||||||
|
def hotkey_remap():
|
||||||
|
'''
|
||||||
|
Переназначение хоткея
|
||||||
|
btn - индекс кнопки хоткея в списке HOTKEYS
|
||||||
|
'''
|
||||||
|
def check(key):
|
||||||
|
key = str(key).replace("'",'')
|
||||||
|
try:
|
||||||
|
sound = os.path.join(win.soundList.item(0).text(),
|
||||||
|
win.soundList.currentItem().text())
|
||||||
|
except AttributeError:
|
||||||
|
win.hkset.setEnabled(True)
|
||||||
|
return False
|
||||||
|
|
||||||
|
if key not in keys.forbidden:
|
||||||
|
hotkeys.update({key:sound})
|
||||||
|
elif key == 'Key.backspace':
|
||||||
|
del hotkeys[find_key(hotkeys, sound)]
|
||||||
|
|
||||||
|
save()
|
||||||
|
hotk.hotkeyList.clear()
|
||||||
|
for i in sound_get_dict['sounds']:
|
||||||
|
for x in i:
|
||||||
|
x = os.path.join(i[0], x)
|
||||||
|
if x in hotkeys.values():
|
||||||
|
hotk.hotkeyList.addItem(f'{find_key(hotkeys, x)}\t:{x}')
|
||||||
|
|
||||||
|
win.hkset.setEnabled(True)
|
||||||
|
return False
|
||||||
|
|
||||||
|
win.hkset.setEnabled(False)
|
||||||
|
|
||||||
|
hotkey_remap_Listener = Listener(
|
||||||
|
on_release=check)
|
||||||
|
hotkey_remap_Listener.start()
|
||||||
|
|
||||||
|
def hotkey_delete():
|
||||||
|
key = hotk.hotkeyList.currentItem().text().split(':')[0].replace('\t', '')
|
||||||
|
hotkeys.pop(key)
|
||||||
|
|
||||||
|
save()
|
||||||
|
hotk.hotkeyList.clear()
|
||||||
|
for i in sound_get_dict['sounds']:
|
||||||
|
for x in i:
|
||||||
|
x = os.path.join(i[0], x)
|
||||||
|
if x in hotkeys.values():
|
||||||
|
hotk.hotkeyList.addItem(f'{find_key(hotkeys, x)}\t:{x}')
|
||||||
|
|
||||||
|
def pref_remap(btn, func_):
|
||||||
|
'''
|
||||||
|
Переназначение клавиши в окно Preference
|
||||||
|
btn - PyQt5 кнопка
|
||||||
|
func_ - строковое значени функции из словаря KEYS_CMD
|
||||||
|
'''
|
||||||
|
def check(key):
|
||||||
|
'''
|
||||||
|
Проверка кнопки btn на не участие
|
||||||
|
в списке запрещенных клавиш keys.forbidden
|
||||||
|
если это клавиша 'Key.backspace' то стираем значение
|
||||||
|
key - pynput код клавиши
|
||||||
|
'''
|
||||||
|
key = str(key).replace("'",'')
|
||||||
|
if key not in keys.forbidden:
|
||||||
|
KEYS_CMD.update({find_key(COMMAND_DICT, func_) : key})
|
||||||
|
btn.setText(keys.dict_[key])
|
||||||
|
elif key == 'Key.backspace':
|
||||||
|
KEYS_CMD.update({find_key(COMMAND_DICT, func_) : ' '})
|
||||||
|
btn.setText(' ')
|
||||||
|
for i in PREF_BTN:
|
||||||
|
i.setEnabled(True)
|
||||||
|
save()
|
||||||
|
return False
|
||||||
|
|
||||||
|
for i in PREF_BTN:
|
||||||
|
i.setEnabled(False)
|
||||||
|
|
||||||
|
hotkey_remap_Listener = Listener(
|
||||||
|
on_release=check)
|
||||||
|
hotkey_remap_Listener.start()
|
||||||
|
|
||||||
|
def find_key(dict, val):
|
||||||
|
'''
|
||||||
|
Поиск ключа в словаре dict по значению val
|
||||||
|
dict - словарь
|
||||||
|
val - значение
|
||||||
|
'''
|
||||||
|
return next((key for key, value in dict.items() if value == val), None)
|
||||||
|
|
||||||
|
def check_update():
|
||||||
|
def decrypt(filename, key):
|
||||||
|
f = Fernet(key)
|
||||||
|
with open(filename, 'rb') as file:
|
||||||
|
encrypted_data = file.read()
|
||||||
|
|
||||||
|
decrypted_data = f.decrypt(encrypted_data)
|
||||||
|
|
||||||
|
return decrypted_data.decode('utf-8')
|
||||||
|
|
||||||
|
file_ = decrypt(os.path.join('data', 'sundpood-runtime.sr') , key.KEY)
|
||||||
|
version = ''
|
||||||
|
for i in file_:
|
||||||
|
if i != '/':
|
||||||
|
version += i
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
print(VERSION)
|
||||||
|
return version.split(' ')[3]
|
||||||
|
|
||||||
|
def save():
|
||||||
|
'''
|
||||||
|
Сохранение настроек оверлея и глобальных хоткеев
|
||||||
|
'''
|
||||||
|
sounds = jsonread(config)['sounds']# Все аудиофайлы
|
||||||
|
|
||||||
|
KEYS_JSON = {} # Настроенные клавиши
|
||||||
|
for i in KEYS_CMD.keys():
|
||||||
|
KEYS_JSON.setdefault(COMMAND_DICT[i], KEYS_CMD[i])
|
||||||
|
|
||||||
|
try:
|
||||||
|
theme = pref.themesList.currentItem().text()
|
||||||
|
except AttributeError:
|
||||||
|
theme = jsonread(config)['Theme']
|
||||||
|
|
||||||
|
sounds_list = {'sounds':sounds, 'hotkeys':hotkeys, 'Theme':theme, 'KEYS_CMD':KEYS_JSON}
|
||||||
|
jsonwrite(config, sounds_list)
|
||||||
|
|
||||||
|
###! CONTROL !###
|
||||||
|
def select_move(mode):
|
||||||
|
'''
|
||||||
|
Перемешение по оверлейному меню
|
||||||
|
mode - кортеж из двух цифр
|
||||||
|
(смещение по категории, смещение по списку)
|
||||||
|
'''
|
||||||
|
select[0] += mode[0] # Категории
|
||||||
|
select[1] += mode[1] # Файлы в категории
|
||||||
|
if select[0] > len(menu)-1 or select[0] < -len(menu)+1:
|
||||||
|
select[0] = 0
|
||||||
|
if select[1] > len(menu[select[0]])-1 or select[1] < -len(menu[select[0]])+1:
|
||||||
|
select[1] = 0
|
||||||
|
if mode[0] != 0:
|
||||||
|
select[1] = 0
|
||||||
|
over.label.setText(menu[select[0]][select[1]])
|
||||||
|
win.select_label.setText(menu[select[0]][select[1]])
|
||||||
|
|
||||||
|
def key_check(key):
|
||||||
|
key = str(key).replace("'",'') # Преобразование кода в строку
|
||||||
|
key_n = '' # Переведенное значение клавиши
|
||||||
|
try:
|
||||||
|
key_n = keys.dict_[key]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
if key in hotkeys.keys():
|
||||||
|
play_sound(hotkeys[key])
|
||||||
|
elif key in KEYS_CMD.values():
|
||||||
|
find_key(KEYS_CMD, key)()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
key_check_Listener = Listener(
|
||||||
|
on_release=key_check)
|
||||||
|
key_check_Listener.start()
|
||||||
|
|
||||||
|
win.exit_button.clicked.connect(win.close)
|
||||||
|
win.min_button.clicked.connect(win.showMinimized)
|
||||||
|
pref.exit_button.clicked.connect(pref.close)
|
||||||
|
pref.min_button.clicked.connect(pref.showMinimized)
|
||||||
|
hotk.exit_button.clicked.connect(hotk.close)
|
||||||
|
hotk.min_button.clicked.connect(hotk.showMinimized)
|
||||||
|
|
||||||
|
win.hkset.clicked.connect(hotkey_remap)
|
||||||
|
win.pref_button.clicked.connect(pref.show)
|
||||||
|
win.hotkeys_button.clicked.connect(hotk.show)
|
||||||
|
win.catList.currentTextChanged.connect(cat_select)
|
||||||
|
win.stop_button.clicked.connect(lambda: sd.stop())
|
||||||
|
win.play_button.clicked.connect(play_sound)
|
||||||
|
|
||||||
|
pref.play_sound.clicked.connect(
|
||||||
|
lambda: pref_remap(pref.play_sound, 'play_sound'))
|
||||||
|
pref.stop_sound.clicked.connect(
|
||||||
|
lambda: pref_remap(pref.stop_sound, 'stop_sound'))
|
||||||
|
pref.select_move_up.clicked.connect(
|
||||||
|
lambda: pref_remap(pref.select_move_up, 'select_move_up'))
|
||||||
|
pref.select_move_down.clicked.connect(
|
||||||
|
lambda: pref_remap(pref.select_move_down, 'select_move_down'))
|
||||||
|
pref.select_move_left.clicked.connect(
|
||||||
|
lambda: pref_remap(pref.select_move_left, 'select_move_left'))
|
||||||
|
pref.select_move_right.clicked.connect(
|
||||||
|
lambda: pref_remap(pref.select_move_right, 'select_move_right'))
|
||||||
|
pref.themesList.currentTextChanged.connect(toggle_stylesheet)
|
||||||
|
pref.update_button.clicked.connect(check_update)
|
||||||
|
|
||||||
|
hotk.delete_button.clicked.connect(hotkey_delete)
|
||||||
|
|
||||||
|
win.show()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
### Создание окна ###
|
||||||
|
app = QApplication([]) # Приложение
|
||||||
|
over = OverlayUi() # Окно оверлея
|
||||||
|
pref = PreferencesUi() # Окно настроек
|
||||||
|
hotk = HotkeysUi() # Окно хоткеев
|
||||||
|
win = MainUi() # Основное окно
|
||||||
|
|
||||||
|
PREF_BTN = [ # Список кнопок настроек клавиш в pref
|
||||||
|
pref.select_move_up,
|
||||||
|
pref.select_move_down,
|
||||||
|
pref.select_move_left,
|
||||||
|
pref.select_move_right,
|
||||||
|
pref.play_sound,
|
||||||
|
pref.stop_sound,]
|
||||||
|
|
||||||
|
### Поиск устроства ввода ###
|
||||||
|
pg.mixer.pre_init(44100, -16, 2, 2048) # setup mixer to avoid sound lag
|
||||||
|
pg.mixer.init(devicename=find_device()) # Установка устройства вывода по умолчанию
|
||||||
|
|
||||||
|
### Глобальные переменные ###
|
||||||
|
VERSION = 102
|
||||||
|
dir_ = 'sound'
|
||||||
|
config = 'settings.json'
|
||||||
|
get_files(dir_, config) # Сбор всех аудиофайлов
|
||||||
|
sound_get_dict = jsonread(config) # Загрузка данных
|
||||||
|
hotkeys = sound_get_dict['hotkeys'] # Загрузка словаря хоткеев
|
||||||
|
theme = sound_get_dict['Theme'] # Загрузка темы
|
||||||
|
menu = sound_get_dict['sounds'] # Загрузка оверлейного меню
|
||||||
|
select = [0, 0] # Установка курсора оверлея в нулевую позицию
|
||||||
|
|
||||||
|
if theme != 'None':
|
||||||
|
toggle_stylesheet(theme)
|
||||||
|
pref.themesList.addItems(os.listdir('themes'))
|
||||||
|
|
||||||
|
for i in sound_get_dict['sounds']:
|
||||||
|
win.catList.addItem(i[0].replace('sound', ''))
|
||||||
|
|
||||||
|
for x in i:
|
||||||
|
x = os.path.join(i[0], x)
|
||||||
|
if x in hotkeys.values():
|
||||||
|
hotk.hotkeyList.addItem(f'{find_key(hotkeys, x)}\t: {x}')
|
||||||
|
|
||||||
|
|
||||||
|
COMMAND_DICT = { # Словарь функций к строковому значению
|
||||||
|
lambda: select_move((0, -1)):'select_move_up', # вверх
|
||||||
|
lambda: select_move((0, 1)) :'select_move_down', # вниз
|
||||||
|
lambda: select_move((-1, 0)):'select_move_left', # влево
|
||||||
|
lambda: select_move((1, 0)) :'select_move_right', # вправо
|
||||||
|
lambda: play_sound(os.path.join(menu[select[0]][0],
|
||||||
|
menu[select[0]][select[1]])):'play_sound', # Играть
|
||||||
|
lambda: sd.stop() :'stop_sound', # Остановить
|
||||||
|
}
|
||||||
|
KEYS_JSON = sound_get_dict['KEYS_CMD']# Загрузка настроенных клавиш
|
||||||
|
KEYS_CMD = COMMAND_DICT.copy() # Настроенные клавиши
|
||||||
|
|
||||||
|
### Установка настроенных клавиш ###
|
||||||
|
for i in KEYS_CMD.keys():
|
||||||
|
KEYS_CMD.update({i:KEYS_JSON[COMMAND_DICT[i]]})
|
||||||
|
KEYS_JSON = None
|
||||||
|
|
||||||
|
combo = 0
|
||||||
|
for i in KEYS_CMD.values():
|
||||||
|
PREF_BTN[combo].setText(keys.dict_[i])
|
||||||
|
combo += 1
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
sys.exit(app.exec())
|
188
data/ui_hotkeys.py
Normal file
188
data/ui_hotkeys.py
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'hotkeys.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.0
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(420, 468)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
|
||||||
|
MainWindow.setSizePolicy(sizePolicy)
|
||||||
|
MainWindow.setMinimumSize(QtCore.QSize(420, 468))
|
||||||
|
MainWindow.setMaximumSize(QtCore.QSize(420, 468))
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap("icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
MainWindow.setWindowIcon(icon)
|
||||||
|
MainWindow.setStyleSheet("QWidget{\n"
|
||||||
|
" background: rgb(44, 44, 44); \n"
|
||||||
|
" font: 25 14pt \"Calibri Light\";\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QLabel{\n"
|
||||||
|
" background: none\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
" border: none;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton:hover{\n"
|
||||||
|
" background: rgb(53, 53, 53);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QListWidget{\n"
|
||||||
|
" margin: 4px;\n"
|
||||||
|
" border: none;\n"
|
||||||
|
"}\n"
|
||||||
|
"QListWidget::item[Custom=\"true\"]{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"QListWidget::item:hover{\n"
|
||||||
|
" background: rgb(53, 53, 53);\n"
|
||||||
|
"}\n"
|
||||||
|
"QListWidget::item:selected{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
" color: black;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QScrollBar:vertical{\n"
|
||||||
|
" border: 1px transparent rgb(58, 58, 58);\n"
|
||||||
|
" border-radius: 4px;\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
" width: 16px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QScrollBar::handle:vertical{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"QScrollBar::sub-page:vertical{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
"}\n"
|
||||||
|
"QScrollBar::add-page:vertical{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#background{\n"
|
||||||
|
" background:rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#exit_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#exit_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(254, 119, 122, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#min_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#min_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#pref_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#pref_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#hotkeys_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#hotkeys_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#select_label{\n"
|
||||||
|
" background: black;\n"
|
||||||
|
" color: white;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#catList::item{\n"
|
||||||
|
" padding: 6px;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QSlider::groove:horizontal {\n"
|
||||||
|
" border: none;\n"
|
||||||
|
" height: 40px;\n"
|
||||||
|
" margin: 0px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QSlider::handle:horizontal {\n"
|
||||||
|
" background-color: rgb(53, 53, 53);\n"
|
||||||
|
" border: none;\n"
|
||||||
|
" height: 40px;\n"
|
||||||
|
" width: 40px;\n"
|
||||||
|
" margin: -15px 0px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QSlider::sub-page:horizontal {\n"
|
||||||
|
" border: none;\n"
|
||||||
|
" height: 40px;\n"
|
||||||
|
" margin: 1px;\n"
|
||||||
|
" background: rgb(63, 63, 63);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#update_button:hover{\n"
|
||||||
|
" background:rgba(10, 128, 179, 128);\n"
|
||||||
|
"}")
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.exit_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.exit_button.setGeometry(QtCore.QRect(380, 0, 41, 31))
|
||||||
|
self.exit_button.setStyleSheet("")
|
||||||
|
self.exit_button.setObjectName("exit_button")
|
||||||
|
self.min_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.min_button.setGeometry(QtCore.QRect(340, 0, 41, 31))
|
||||||
|
self.min_button.setStyleSheet("")
|
||||||
|
self.min_button.setObjectName("min_button")
|
||||||
|
self.Hotkeys = QtWidgets.QLabel(self.centralwidget)
|
||||||
|
self.Hotkeys.setGeometry(QtCore.QRect(20, 40, 291, 20))
|
||||||
|
self.Hotkeys.setStyleSheet("background: none;\n"
|
||||||
|
"")
|
||||||
|
self.Hotkeys.setObjectName("Hotkeys")
|
||||||
|
self.background = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.background.setGeometry(QtCore.QRect(0, 0, 421, 71))
|
||||||
|
self.background.setStyleSheet("")
|
||||||
|
self.background.setObjectName("background")
|
||||||
|
self.hotkeyList = QtWidgets.QListWidget(self.centralwidget)
|
||||||
|
self.hotkeyList.setGeometry(QtCore.QRect(0, 70, 421, 351))
|
||||||
|
self.hotkeyList.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
|
self.hotkeyList.setObjectName("hotkeyList")
|
||||||
|
self.delete_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.delete_button.setGeometry(QtCore.QRect(0, 420, 101, 51))
|
||||||
|
self.delete_button.setStyleSheet("")
|
||||||
|
self.delete_button.setObjectName("delete_button")
|
||||||
|
self.background.raise_()
|
||||||
|
self.exit_button.raise_()
|
||||||
|
self.min_button.raise_()
|
||||||
|
self.Hotkeys.raise_()
|
||||||
|
self.hotkeyList.raise_()
|
||||||
|
self.delete_button.raise_()
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "Hotkeys"))
|
||||||
|
self.exit_button.setText(_translate("MainWindow", "X"))
|
||||||
|
self.min_button.setText(_translate("MainWindow", "-"))
|
||||||
|
self.Hotkeys.setText(_translate("MainWindow", "Hotkeys"))
|
||||||
|
self.delete_button.setText(_translate("MainWindow", "Delete"))
|
42
data/ui_overlay.py
Normal file
42
data/ui_overlay.py
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'overlay.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.0
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(300, 30)
|
||||||
|
MainWindow.setMinimumSize(QtCore.QSize(300, 30))
|
||||||
|
MainWindow.setMaximumSize(QtCore.QSize(300, 30))
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap("icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
MainWindow.setWindowIcon(icon)
|
||||||
|
MainWindow.setWindowOpacity(0.5)
|
||||||
|
MainWindow.setToolTipDuration(5)
|
||||||
|
MainWindow.setStyleSheet("\n"
|
||||||
|
"font: 75 14pt \"Calibri\";\n"
|
||||||
|
"color: white;\n"
|
||||||
|
"background-color: black;")
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.label = QtWidgets.QLabel(self.centralwidget)
|
||||||
|
self.label.setGeometry(QtCore.QRect(0, 0, 301, 31))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
|
self.label.setText(_translate("MainWindow", ""))
|
214
data/ui_preferences.py
Normal file
214
data/ui_preferences.py
Normal file
|
@ -0,0 +1,214 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'preferences.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.2
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(420, 500)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
|
||||||
|
MainWindow.setSizePolicy(sizePolicy)
|
||||||
|
MainWindow.setMinimumSize(QtCore.QSize(420, 500))
|
||||||
|
MainWindow.setMaximumSize(QtCore.QSize(420, 500))
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap("icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
MainWindow.setWindowIcon(icon)
|
||||||
|
MainWindow.setStyleSheet("QWidget{\n"
|
||||||
|
" background: rgb(44, 44, 44); \n"
|
||||||
|
" font: 25 14pt \"Calibri Light\";\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QLabel{\n"
|
||||||
|
" background: none\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
" border: none;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton:hover{\n"
|
||||||
|
" background: rgb(53, 53, 53);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QListWidget{\n"
|
||||||
|
" margin: 4px;\n"
|
||||||
|
" border: none;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QListWidget::item[Custom=\"true\"]{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QListWidget::item:hover{\n"
|
||||||
|
" background: rgb(53, 53, 53);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QListWidget::item:selected{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
" color: black;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QScrollBar:vertical{\n"
|
||||||
|
" border: 1px transparent rgb(58, 58, 58);\n"
|
||||||
|
" border-radius: 4px;\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
" width: 16px;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QScrollBar::handle:vertical{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QScrollBar::sub-page:vertical{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QScrollBar::add-page:vertical{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#background{\n"
|
||||||
|
" background:rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#exit_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#exit_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(254, 119, 122, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#min_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#min_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#update_button:hover{\n"
|
||||||
|
" background:rgba(10, 128, 179, 128);\n"
|
||||||
|
"}")
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.exit_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.exit_button.setGeometry(QtCore.QRect(380, 0, 41, 31))
|
||||||
|
self.exit_button.setStyleSheet("")
|
||||||
|
self.exit_button.setObjectName("exit_button")
|
||||||
|
self.min_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.min_button.setGeometry(QtCore.QRect(340, 0, 41, 31))
|
||||||
|
self.min_button.setStyleSheet("")
|
||||||
|
self.min_button.setObjectName("min_button")
|
||||||
|
self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 70, 391, 211))
|
||||||
|
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
|
||||||
|
self.gridLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.gridLayout.setHorizontalSpacing(6)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.label_8 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_8.setStyleSheet("background:none")
|
||||||
|
self.label_8.setObjectName("label_8")
|
||||||
|
self.gridLayout.addWidget(self.label_8, 0, 0, 1, 1)
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.gridLayout.addWidget(self.label_5, 5, 0, 1, 1)
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
|
||||||
|
self.select_move_down = QtWidgets.QPushButton(self.gridLayoutWidget)
|
||||||
|
self.select_move_down.setObjectName("select_move_down")
|
||||||
|
self.gridLayout.addWidget(self.select_move_down, 2, 1, 1, 1)
|
||||||
|
self.select_move_right = QtWidgets.QPushButton(self.gridLayoutWidget)
|
||||||
|
self.select_move_right.setObjectName("select_move_right")
|
||||||
|
self.gridLayout.addWidget(self.select_move_right, 4, 1, 1, 1)
|
||||||
|
self.select_move_up = QtWidgets.QPushButton(self.gridLayoutWidget)
|
||||||
|
self.select_move_up.setObjectName("select_move_up")
|
||||||
|
self.gridLayout.addWidget(self.select_move_up, 1, 1, 1, 1)
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
|
||||||
|
self.stop_sound = QtWidgets.QPushButton(self.gridLayoutWidget)
|
||||||
|
self.stop_sound.setObjectName("stop_sound")
|
||||||
|
self.gridLayout.addWidget(self.stop_sound, 6, 1, 1, 1)
|
||||||
|
self.label_6 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.gridLayout.addWidget(self.label_6, 6, 0, 1, 1)
|
||||||
|
self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
|
||||||
|
self.select_move_left = QtWidgets.QPushButton(self.gridLayoutWidget)
|
||||||
|
self.select_move_left.setObjectName("select_move_left")
|
||||||
|
self.gridLayout.addWidget(self.select_move_left, 3, 1, 1, 1)
|
||||||
|
self.label = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
|
||||||
|
self.play_sound = QtWidgets.QPushButton(self.gridLayoutWidget)
|
||||||
|
self.play_sound.setObjectName("play_sound")
|
||||||
|
self.gridLayout.addWidget(self.play_sound, 5, 1, 1, 1)
|
||||||
|
self.background = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.background.setGeometry(QtCore.QRect(0, 0, 421, 71))
|
||||||
|
self.background.setStyleSheet("")
|
||||||
|
self.background.setObjectName("background")
|
||||||
|
self.label_7 = QtWidgets.QLabel(self.background)
|
||||||
|
self.label_7.setGeometry(QtCore.QRect(10, 10, 161, 41))
|
||||||
|
self.label_7.setStyleSheet("")
|
||||||
|
self.label_7.setObjectName("label_7")
|
||||||
|
self.label_9 = QtWidgets.QLabel(self.centralwidget)
|
||||||
|
self.label_9.setGeometry(QtCore.QRect(10, 290, 201, 31))
|
||||||
|
self.label_9.setObjectName("label_9")
|
||||||
|
self.themesList = QtWidgets.QListWidget(self.centralwidget)
|
||||||
|
self.themesList.setGeometry(QtCore.QRect(10, 330, 401, 131))
|
||||||
|
self.themesList.setObjectName("themesList")
|
||||||
|
self.update_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.update_button.setGeometry(QtCore.QRect(10, 460, 181, 31))
|
||||||
|
self.update_button.setObjectName("update_button")
|
||||||
|
self.background.raise_()
|
||||||
|
self.exit_button.raise_()
|
||||||
|
self.min_button.raise_()
|
||||||
|
self.gridLayoutWidget.raise_()
|
||||||
|
self.label_9.raise_()
|
||||||
|
self.themesList.raise_()
|
||||||
|
self.update_button.raise_()
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "Preferences"))
|
||||||
|
self.exit_button.setText(_translate("MainWindow", "X"))
|
||||||
|
self.min_button.setText(_translate("MainWindow", "-"))
|
||||||
|
self.label_8.setText(_translate("MainWindow", "Overlay control"))
|
||||||
|
self.label_5.setText(_translate("MainWindow", "Overlay play sound"))
|
||||||
|
self.label_2.setText(_translate("MainWindow", "Overlay menu down"))
|
||||||
|
self.select_move_down.setText(_translate("MainWindow", "PushButton"))
|
||||||
|
self.select_move_right.setText(_translate("MainWindow", "PushButton"))
|
||||||
|
self.select_move_up.setText(_translate("MainWindow", "PushButton"))
|
||||||
|
self.label_3.setText(_translate("MainWindow", "Overlay menu left"))
|
||||||
|
self.stop_sound.setText(_translate("MainWindow", "PushButton"))
|
||||||
|
self.label_6.setText(_translate("MainWindow", "Overlay stop sound"))
|
||||||
|
self.label_4.setText(_translate("MainWindow", "Overlay menu right"))
|
||||||
|
self.select_move_left.setText(_translate("MainWindow", "PushButton"))
|
||||||
|
self.label.setText(_translate("MainWindow", "Overlay menu up"))
|
||||||
|
self.play_sound.setText(_translate("MainWindow", "PushButton"))
|
||||||
|
self.label_7.setText(_translate("MainWindow", "Preferences"))
|
||||||
|
self.label_9.setText(_translate("MainWindow", "Themes"))
|
||||||
|
self.update_button.setText(_translate("MainWindow", "Check for update"))
|
212
data/ui_sundpood.py
Normal file
212
data/ui_sundpood.py
Normal file
|
@ -0,0 +1,212 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'sundpood.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.2
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(640, 480)
|
||||||
|
MainWindow.setMinimumSize(QtCore.QSize(640, 480))
|
||||||
|
MainWindow.setMaximumSize(QtCore.QSize(640, 480))
|
||||||
|
MainWindow.setStyleSheet("QWidget{\n"
|
||||||
|
" background: rgb(44, 44, 44); \n"
|
||||||
|
" font: 25 14pt \"Calibri Light\";\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QLabel{\n"
|
||||||
|
" background: none\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
" border: none;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QPushButton:hover{\n"
|
||||||
|
" background: rgb(53, 53, 53);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QListWidget{\n"
|
||||||
|
" margin: 4px;\n"
|
||||||
|
" border: none;\n"
|
||||||
|
"}\n"
|
||||||
|
"QListWidget::item[Custom=\"true\"]{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"QListWidget::item:hover{\n"
|
||||||
|
" background: rgb(53, 53, 53);\n"
|
||||||
|
"}\n"
|
||||||
|
"QListWidget::item:selected{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
" color: black;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QScrollBar:vertical{\n"
|
||||||
|
" border: 1px transparent rgb(58, 58, 58);\n"
|
||||||
|
" border-radius: 4px;\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
" width: 16px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QScrollBar::handle:vertical{\n"
|
||||||
|
" background: rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"QScrollBar::sub-page:vertical{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
"}\n"
|
||||||
|
"QScrollBar::add-page:vertical{\n"
|
||||||
|
" background: rgb(58, 58, 58);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#background{\n"
|
||||||
|
" background:rgb(48, 48, 48);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#exit_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#exit_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(254, 119, 122, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#min_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#min_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#pref_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#pref_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#hotkeys_button{\n"
|
||||||
|
" margin-bottom: 1px;\n"
|
||||||
|
"}\n"
|
||||||
|
"#hotkeys_button:hover{\n"
|
||||||
|
" color: black;\n"
|
||||||
|
" background: rgba(194, 213, 254, 128);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#select_label{\n"
|
||||||
|
" background: black;\n"
|
||||||
|
" color: white;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#catList::item{\n"
|
||||||
|
" padding: 6px;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"QSlider::groove:horizontal {\n"
|
||||||
|
" border: none;\n"
|
||||||
|
" height: 40px;\n"
|
||||||
|
" margin: 0px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QSlider::handle:horizontal {\n"
|
||||||
|
" background-color: rgb(53, 53, 53);\n"
|
||||||
|
" border: none;\n"
|
||||||
|
" height: 40px;\n"
|
||||||
|
" width: 40px;\n"
|
||||||
|
" margin: -15px 0px;\n"
|
||||||
|
"}\n"
|
||||||
|
"QSlider::sub-page:horizontal {\n"
|
||||||
|
" border: none;\n"
|
||||||
|
" height: 40px;\n"
|
||||||
|
" margin: 1px;\n"
|
||||||
|
" background: rgb(63, 63, 63);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"#update_button:hover{\n"
|
||||||
|
" background:rgba(10, 128, 179, 128);\n"
|
||||||
|
"}")
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.background = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.background.setGeometry(QtCore.QRect(0, 0, 641, 481))
|
||||||
|
self.background.setStyleSheet("")
|
||||||
|
self.background.setObjectName("background")
|
||||||
|
self.min_button = QtWidgets.QPushButton(self.background)
|
||||||
|
self.min_button.setGeometry(QtCore.QRect(560, 0, 41, 31))
|
||||||
|
self.min_button.setStyleSheet("")
|
||||||
|
self.min_button.setObjectName("min_button")
|
||||||
|
self.exit_button = QtWidgets.QPushButton(self.background)
|
||||||
|
self.exit_button.setGeometry(QtCore.QRect(600, 0, 41, 31))
|
||||||
|
self.exit_button.setStyleSheet("")
|
||||||
|
self.exit_button.setObjectName("exit_button")
|
||||||
|
self.pref_button = QtWidgets.QPushButton(self.background)
|
||||||
|
self.pref_button.setGeometry(QtCore.QRect(0, 0, 111, 31))
|
||||||
|
self.pref_button.setObjectName("pref_button")
|
||||||
|
self.hotkeys_button = QtWidgets.QPushButton(self.background)
|
||||||
|
self.hotkeys_button.setGeometry(QtCore.QRect(110, 0, 111, 31))
|
||||||
|
self.hotkeys_button.setObjectName("hotkeys_button")
|
||||||
|
self.stop_button = QtWidgets.QPushButton(self.background)
|
||||||
|
self.stop_button.setGeometry(QtCore.QRect(0, 120, 171, 41))
|
||||||
|
self.stop_button.setObjectName("stop_button")
|
||||||
|
self.hkset = QtWidgets.QPushButton(self.background)
|
||||||
|
self.hkset.setGeometry(QtCore.QRect(0, 200, 171, 41))
|
||||||
|
self.hkset.setObjectName("hkset")
|
||||||
|
self.soundList = QtWidgets.QListWidget(self.background)
|
||||||
|
self.soundList.setGeometry(QtCore.QRect(170, 60, 471, 421))
|
||||||
|
self.soundList.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||||
|
self.soundList.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||||
|
self.soundList.setObjectName("soundList")
|
||||||
|
self.catList = QtWidgets.QListWidget(self.background)
|
||||||
|
self.catList.setGeometry(QtCore.QRect(0, 280, 171, 201))
|
||||||
|
self.catList.setStyleSheet("")
|
||||||
|
self.catList.setObjectName("catList")
|
||||||
|
self.label = QtWidgets.QLabel(self.background)
|
||||||
|
self.label.setGeometry(QtCore.QRect(6, 253, 161, 31))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setFamily("Calibri Light")
|
||||||
|
font.setPointSize(14)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setItalic(False)
|
||||||
|
font.setWeight(3)
|
||||||
|
self.label.setFont(font)
|
||||||
|
self.label.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.volume_slider = QtWidgets.QSlider(self.background)
|
||||||
|
self.volume_slider.setGeometry(QtCore.QRect(10, 170, 151, 20))
|
||||||
|
self.volume_slider.setMaximum(100)
|
||||||
|
self.volume_slider.setProperty("value", 70)
|
||||||
|
self.volume_slider.setOrientation(QtCore.Qt.Horizontal)
|
||||||
|
self.volume_slider.setObjectName("volume_slider")
|
||||||
|
self.play_button = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.play_button.setGeometry(QtCore.QRect(0, 70, 171, 41))
|
||||||
|
self.play_button.setObjectName("play_button")
|
||||||
|
self.select_label = QtWidgets.QLabel(self.centralwidget)
|
||||||
|
self.select_label.setGeometry(QtCore.QRect(0, 30, 641, 31))
|
||||||
|
self.select_label.setStyleSheet("")
|
||||||
|
self.select_label.setText("")
|
||||||
|
self.select_label.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
self.select_label.setObjectName("select_label")
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
|
self.min_button.setText(_translate("MainWindow", "-"))
|
||||||
|
self.exit_button.setText(_translate("MainWindow", "X"))
|
||||||
|
self.pref_button.setText(_translate("MainWindow", "Settings"))
|
||||||
|
self.hotkeys_button.setText(_translate("MainWindow", "Hotkeys"))
|
||||||
|
self.stop_button.setText(_translate("MainWindow", "Stop"))
|
||||||
|
self.hkset.setText(_translate("MainWindow", "Set hotkey"))
|
||||||
|
self.label.setText(_translate("MainWindow", "Categories"))
|
||||||
|
self.play_button.setText(_translate("MainWindow", "Play"))
|
Loading…
Add table
Reference in a new issue