Compare commits

..

49 commits
v1.1 ... master

Author SHA1 Message Date
b833b1bd6d Fix banner picture 2023-08-17 02:48:59 +03:00
6590b4fe61 Update README.md 2023-08-17 02:48:19 +03:00
Ninnjah
897eb3a127
Delete key.py 2021-03-02 21:42:29 +03:00
Ninnjah
5a5cb4013f
Delete keys.py 2021-03-02 21:42:20 +03:00
Ninnjah
d20f469d0b
Delete .gitignore 2021-03-02 21:41:55 +03:00
Ninnjah
22bf9339ae
Update README.md 2021-01-03 08:29:02 +03:00
Ninnjah
29c4034b44
Update requirements.txt 2021-01-02 21:29:32 +03:00
Ninnjah
b72cd35065
Update README.md 2021-01-02 21:28:14 +03:00
Ninnjah
bc77ff8853
ADDED themes screenshots 2021-01-02 21:15:52 +03:00
Ninnjah
97e13c2a7c
Element names changed 2021-01-02 21:12:44 +03:00
Ninnjah
52b4571a0b
New theme 2021-01-02 21:10:26 +03:00
Ninnjah
705dd348ff
Hotfix 2021-01-02 18:05:18 +03:00
Ninnjah
bcd72f473c
Delete main.py 2021-01-02 16:17:04 +03:00
Ninnjah
da8ea99ed6
ADDED launch non encrypted file 2021-01-02 16:16:25 +03:00
Ninnjah
f9775d3676
Update key.py 2021-01-02 16:13:39 +03:00
Ninnjah
5ace3900df
Create .gitignore 2021-01-02 16:10:33 +03:00
Ninnjah
732126bacb
Launcher dynamically loads sundpood 2021-01-02 16:06:56 +03:00
Ninnjah
942832999e
Now sundpood loads dynamically with launcher 2021-01-02 16:05:59 +03:00
Ninnjah
5da8d2ad88
moved to 'data' folder 2021-01-02 16:04:32 +03:00
Ninnjah
cbcff5ba3d
moved to 'data' folder 2021-01-02 16:04:20 +03:00
Ninnjah
e254ffc101
moved to 'data' folder 2021-01-02 16:04:09 +03:00
Ninnjah
fe06218bf1
moved to 'data' folder 2021-01-02 16:03:50 +03:00
Ninnjah
cb8941b97c
hotfix 2020-12-14 00:18:21 +03:00
Ninnjah
4718ac55aa
Add themes 2020-12-14 00:13:25 +03:00
Ninnjah
cfa2867b8a
Fully REWORKED GUI 2020-12-14 00:13:02 +03:00
Ninnjah
e7d89bced8
UPDATE 1.5
Fully reworked GUI
Hotkeys now working for all categories
Now convertation starts when sound plays and saves in temp file
Now you can choose theme
2020-12-14 00:12:35 +03:00
Ninnjah
bdeab86f70
Added new keys 2020-12-14 00:08:39 +03:00
Ninnjah
a11d0f89f0
New icon 2020-12-14 00:07:33 +03:00
Ninnjah
c8a806f377
Update README.md 2020-12-14 00:07:07 +03:00
Ninnjah
a5158f6767
Add new banner 2020-12-14 00:02:46 +03:00
Ninnjah
82feaf510d
New banner Sundpood v1.5 2020-12-14 00:02:20 +03:00
Ninnjah
36a2d47c3e
Delete banner.jpg 2020-12-13 23:57:04 +03:00
Ninnjah
2dabff1ee3
Update README.md 2020-10-30 01:52:35 +03:00
Ninnjah
4829149082
Added comments 2020-10-30 01:50:29 +03:00
Ninnjah
c3c1880349
pynput==1.6.8 2020-10-28 00:42:04 +03:00
Ninnjah
49ae4c053b
Add preferences window 2020-10-28 00:41:26 +03:00
Ninnjah
3c30a81585
Sundpood v1.3
- Using pynput instead keyboard module (better working)
- Add settings of overlay control
2020-10-28 00:40:07 +03:00
Ninnjah
a72c4d88a1
ADD icon 2020-10-27 22:51:28 +03:00
Ninnjah
d2f4116c2b
ADD requirements.txt 2020-10-27 22:49:07 +03:00
Ninnjah
3da1125d83
ADD Used modules 2020-10-27 22:48:49 +03:00
Ninnjah
9a39d14a32
ADD link to SoundPad 2020-10-23 04:57:33 +03:00
Ninnjah
2f773068d3
Deleted unnecessary function 2020-10-23 02:28:00 +03:00
Ninnjah
8181dfa28f
KEYS UPDATE
UPDATE:
- Moved from keyboard module to pynput.Listner, now keys work better
- Refactored sound_get function
- Little fixes
2020-10-23 02:26:48 +03:00
Ninnjah
5ed7c7d2c8
ADD key.py 2020-10-23 02:23:18 +03:00
Ninnjah
af9c4f7b77
Add files via upload 2020-10-21 01:23:50 +03:00
Ninnjah
ac4f0662af
Update README.md 2020-10-21 01:21:50 +03:00
Ninnjah
27d2b5a693
UPDATE stylesheet
Now it's dark theme
2020-10-21 01:17:24 +03:00
Ninnjah
cbef52643e
UPDATE screenshot
last released version
2020-10-21 01:15:35 +03:00
Ninnjah
a7de100c2c
ADDED change hotkeys
Now you can change hotkeys (f1-f12) to any key on your keyboard
2020-10-21 00:38:10 +03:00
20 changed files with 1462 additions and 435 deletions

View file

@ -1,21 +1,40 @@
# Sundpood
![Banner](https://github.com/Ninnjah/Sundpood/blob/master/banner.jpg)
![Banner](https://git.dc09.ru/Ninnjah/Sundpood/raw/branch/master/pics/banner.jpg)
App like SoundPad (needs [VoiceMeeter](https://vb-audio.com/Voicemeeter/)(allready in "redist" folder))
App like [SoundPad](https://www.leppsoft.com/soundpad/en/download/)(needs [VoiceMeeter](https://vb-audio.com/Voicemeeter/)(allready in "redist" folder))
### Features:
- Play sound by pressing hotkey(F1-F12)
- Converting sounds by [ffmpeg](https://ffmpeg.org/download.html)
- Play sound by pressing hotkey
- Supported formats:
- .wav
- .mp3
- .ogg
- ~~.m4a~~
- ~~Converting sounds by [ffmpeg](https://ffmpeg.org/download.html)~~
- Sound categories (folders in "sound" folder)
- Overlay menu by press F1 key
- Overlay control on numpad
```
numpad 8/2 - select sound
numpad 4/6 - select category
numapd 5 - play sound
```
- Sound categories in overlay menu(folders in "sound" folder)
- Overlay control on numpad (set in preferences)
- Light, Dark Themes and mode
### Links to needs soft
- [VoiceMeeter](https://vb-audio.com/Voicemeeter/) for translate sound into microphone
- [ffmpeg](https://ffmpeg.org/download.html) for convert sounds in .wav format
### Screenshots
- Light Theme
![light theme](https://git.dc09.ru/Ninnjah/Sundpood/raw/branch/master/pics/Light%20theme.png)
---
- Dark Theme
![light theme](https://git.dc09.ru/Ninnjah/Sundpood/raw/branch/master/pics/Dark%20theme.png)
---
- Rachila Theme
![light theme](https://git.dc09.ru/Ninnjah/Sundpood/raw/branch/master/pics/Rachila%20theme.png)
---
### Requirements:
- [sounddevice](https://pypi.org/project/sounddevice/) for select audio device
- [pynput](https://pypi.org/project/pynput/) for hotkeys
- [PyQt5](https://pypi.org/project/PyQt5/) for GUI
- [VoiceMeeter](https://vb-audio.com/Voicemeeter/) for redirect sound into microphone
- ~~[ffmpeg](https://ffmpeg.org/download.html) for convert sounds in .wav format~~Now SundPood using pygame module
- [PyGame](https://pypi.org/project/pygame/) for playing sounds

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

42
data/keys.py Normal file
View 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
View 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())

153
data/ui_hotkeys.py Normal file
View file

@ -0,0 +1,153 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'hotkeys.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, 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"
"\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"
"#delete_button:hover{\n"
" color: black;\n"
" background: rgba(254, 119, 122, 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.title = QtWidgets.QLabel(self.centralwidget)
self.title.setGeometry(QtCore.QRect(20, 40, 291, 20))
self.title.setStyleSheet("background: none;\n"
"")
self.title.setObjectName("title")
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.title.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.title.setText(_translate("MainWindow", "Hotkeys"))
self.delete_button.setText(_translate("MainWindow", "Delete"))

View file

@ -14,22 +14,22 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(250, 20)
MainWindow.setMinimumSize(QtCore.QSize(250, 20))
MainWindow.setMaximumSize(QtCore.QSize(250, 20))
MainWindow.setGeometry(QtCore.QRect(0, 0, 250, 20))
MainWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
icon = QtGui.QIcon.fromTheme("icon.ico")
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("background-color: black;\n"
"color: white;")
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, 251, 21))
self.label.setText("")
self.label.setGeometry(QtCore.QRect(0, 0, 301, 31))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
@ -38,4 +38,5 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate(" ", " "))
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", ""))

209
data/ui_preferences.py Normal file
View file

@ -0,0 +1,209 @@
# -*- 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, 80, 391, 201))
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.pref_over = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over.setStyleSheet("background:none")
self.pref_over.setObjectName("pref_over")
self.gridLayout.addWidget(self.pref_over, 0, 0, 1, 1)
self.pref_over_el5 = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over_el5.setObjectName("pref_over_el5")
self.gridLayout.addWidget(self.pref_over_el5, 5, 0, 1, 1)
self.pref_over_el2 = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over_el2.setObjectName("pref_over_el2")
self.gridLayout.addWidget(self.pref_over_el2, 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.pref_over_el3 = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over_el3.setObjectName("pref_over_el3")
self.gridLayout.addWidget(self.pref_over_el3, 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.pref_over_el6 = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over_el6.setObjectName("pref_over_el6")
self.gridLayout.addWidget(self.pref_over_el6, 6, 0, 1, 1)
self.pref_over_el4 = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over_el4.setObjectName("pref_over_el4")
self.gridLayout.addWidget(self.pref_over_el4, 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.pref_over_el1 = QtWidgets.QLabel(self.gridLayoutWidget)
self.pref_over_el1.setObjectName("pref_over_el1")
self.gridLayout.addWidget(self.pref_over_el1, 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.title = QtWidgets.QLabel(self.background)
self.title.setGeometry(QtCore.QRect(10, 10, 161, 41))
self.title.setStyleSheet("")
self.title.setObjectName("title")
self.pref_themes = QtWidgets.QLabel(self.centralwidget)
self.pref_themes.setGeometry(QtCore.QRect(10, 290, 201, 31))
self.pref_themes.setObjectName("pref_themes")
self.themesList = QtWidgets.QListWidget(self.centralwidget)
self.themesList.setGeometry(QtCore.QRect(10, 330, 401, 161))
self.themesList.setObjectName("themesList")
self.background.raise_()
self.exit_button.raise_()
self.min_button.raise_()
self.gridLayoutWidget.raise_()
self.pref_themes.raise_()
self.themesList.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.pref_over.setText(_translate("MainWindow", "Overlay control"))
self.pref_over_el5.setText(_translate("MainWindow", "Overlay play sound"))
self.pref_over_el2.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.pref_over_el3.setText(_translate("MainWindow", "Overlay menu left"))
self.stop_sound.setText(_translate("MainWindow", "PushButton"))
self.pref_over_el6.setText(_translate("MainWindow", "Overlay stop sound"))
self.pref_over_el4.setText(_translate("MainWindow", "Overlay menu right"))
self.select_move_left.setText(_translate("MainWindow", "PushButton"))
self.pref_over_el1.setText(_translate("MainWindow", "Overlay menu up"))
self.play_sound.setText(_translate("MainWindow", "PushButton"))
self.title.setText(_translate("MainWindow", "Preferences"))
self.pref_themes.setText(_translate("MainWindow", "Themes"))

211
data/ui_sundpood.py Normal file
View file

@ -0,0 +1,211 @@
# -*- 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))
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"
"}")
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.cat_label = QtWidgets.QLabel(self.background)
self.cat_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.cat_label.setFont(font)
self.cat_label.setAlignment(QtCore.Qt.AlignCenter)
self.cat_label.setObjectName("cat_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.cat_label.setText(_translate("MainWindow", "Categories"))
self.play_button.setText(_translate("MainWindow", "Play"))

BIN
icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

33
launcher.py Normal file
View file

@ -0,0 +1,33 @@
import os
from cryptography.fernet import Fernet
import key
### Добавь здесь модули нужные твоей программе ###
import pygame
import sounddevice as sd
from pynput.keyboard import Listener
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
### ^^^ ^^^ ###
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')
if os.path.exists(os.path.join('data', 'main.py')):
with open(os.path.join('data', 'main.py'), 'r', encoding='utf-8') as f:
exec(f.read())
else:
exec(decrypt(os.path.join('data', 'sundpood-runtime.sr') , key.KEY))

229
main.py
View file

@ -1,229 +0,0 @@
import os
import sys
import json
import threading
import keyboard
import soundfile as sf
import sounddevice as sd
from PyQt5 import QtWidgets, QtGui, QtCore
import ui_sundpood
import ui_overlay
class OverlayUi(QtWidgets.QMainWindow, ui_overlay.Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_F1:
self.hide()
win.show()
class MainUi(QtWidgets.QMainWindow, ui_sundpood.Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_F1:
self.hide()
over.show()
###! JSON !###
def jsonread(file): ## Чтение JSON
with open(file, "r", encoding='utf-8') as read_file:
data = json.load(read_file)
return data
def jsonwrite(file, data): ## Запись JSON
with open(file, 'w', encoding='utf-8') as write_file:
write_file.write(json.dumps(data))
###! FUNCTIONS !###
def found_device(list_): # Поиск микшера VoiceMeeter
index = 0
for i in list_:
if 'VoiceMeeter Input' in i['name']:
break
index += 1
return index
def sound_get(mode): # Сбор файлов
if os.path.exists('settings.json') and mode == False:
sounds_list = jsonread('settings.json')
elif not os.path.exists('settings.json') or mode == True:
msg = QtWidgets.QMessageBox()
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('sound'):
sounds = os.listdir('sound')
if len(sounds) == 0:
msg.exec_()
exit()
menu = []
sounds_list = ['sound\\']
for i in os.listdir('sound'): # Коонвертируем файлы в .wav
print(f'i = {i}')
print(os.path.join(os.getcwd(), 'sound', i))
name = i
format_ = ''
if os.path.isfile(os.path.join('sound', i)):
while i[-1] != '.':
format_ += i[-1]
i = i[:-1]
format_ = format_[::-1]
if format_ in ['mp3', 'm4a']:
os.system(f'ffmpeg.exe -i "sound\\{name}" "sound\\{i}wav"')
os.remove(f'sound\\{name}')
sounds_list.append(name)
else:
sounds_list_cat = [os.path.join('sound', i)]
for x in os.listdir(os.path.join('sound', i)): # Коонвертируем файлы в .wav
print(f'x = {x}')
print(os.path.join('sound', i, x))
name = x
format_ = ''
if os.path.isfile(os.path.join('sound', i, x)):
while x[-1] != '.':
format_ += x[-1]
x = x[:-1]
format_ = format_[::-1]
if format_ in ['mp3', 'm4a']:
os.system(f'ffmpeg.exe -i "sound\\{os.path.join(i, name)}" "sound\\{os.path.join(i, x)}wav"')
os.remove(f'sound\\{os.path.join(i, name)}')
sounds_list_cat.append(name)
menu.append(sounds_list_cat)
menu.append(sounds_list)
if os.path.exists('settings.json'):
hotkeys = jsonread('settings.json')[1]
sounds_list = [sounds, hotkeys, menu]
else:
sounds_list = [sounds, ['', '', '', '', '', '', '', '', '', '', '', ''], menu]
for i in COMBOS:
i.addItems(sounds)
jsonwrite('settings.json', sounds_list)
else:
msg.exec_()
exit()
return sounds_list
def save(): # Сохранение списка хоткеев
hotkeys = []
sounds = sound_get(False)
for i in COMBOS:
hotkeys.append(i.currentText())
jsonwrite('settings.json', [sounds, hotkeys])
sounds = None
hotkeys = None
def play_sound(index): # Проигрываение звука
try:
filename = COMBOS[index].currentText()
try:
data, fs = sf.read(os.path.join('sound', filename), dtype='float32')
sd.play(data, fs)
keyboard.wait(sd.play())
sd.wait()
except:
pass
except:
filename = menu[select[0]][select[1]]
try:
data, fs = sf.read(os.path.join(menu[select[0]][0], filename), dtype='float32')
sd.play(data, fs)
keyboard.wait(sd.play())
sd.wait()
except:
pass
###! CONTROL !###
def key(arg): # Хоткеи
def select_move(mode):
select[1] += mode[1]
select[0] += mode[0]
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]])
keyboard.add_hotkey('f1', play_sound, args=[0])
keyboard.add_hotkey('f2', play_sound, args=[1])
keyboard.add_hotkey('f3', play_sound, args=[2])
keyboard.add_hotkey('f4', play_sound, args=[3])
keyboard.add_hotkey('f5', play_sound, args=[4])
keyboard.add_hotkey('f6', play_sound, args=[5])
keyboard.add_hotkey('f7', play_sound, args=[6])
keyboard.add_hotkey('f8', play_sound, args=[7])
keyboard.add_hotkey('f9', play_sound, args=[8])
keyboard.add_hotkey('f10', play_sound, args=[9])
keyboard.add_hotkey('f11', play_sound, args=[10])
keyboard.add_hotkey('f12', play_sound, args=[11])
keyboard.add_hotkey(72, select_move, args=[[0, -1]])
keyboard.add_hotkey(80, select_move, args=[[0, 1]])
keyboard.add_hotkey(77, select_move, args=[[1, 0]])
keyboard.add_hotkey(75, select_move, args=[[-1, 0]])
keyboard.add_hotkey(76, play_sound, args=[''])
keyboard.add_hotkey(73, sd.stop)
def main(): # Интерфейс
sounds = sound_get(True)[1]
combo = 0
for i in sounds:
index = COMBOS[combo].findText(i)
COMBOS[combo].setCurrentIndex(index)
combo += 1
x = threading.Thread(target=key, args=(1,))
x.setDaemon(True)
x.start()
win.save_button.clicked.connect(save)
if __name__ == '__main__':
### Поиск устроства ввода ###
list_ = list(sd.query_devices())
index = found_device(list_)
sd.default.device = list_[index]['name']
### Создание окна ###
app = QtWidgets.QApplication([])
over = OverlayUi()
win = MainUi()
win.show()
select = [0, 0]
COMBOS = [
win.combo0,
win.combo1,
win.combo2,
win.combo3,
win.combo4,
win.combo5,
win.combo6,
win.combo7,
win.combo8,
win.combo9,
win.combo10,
win.combo11,
]
menu = sound_get(True)[2]
main()
sys.exit(app.exec())

BIN
pics/Dark theme.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

BIN
pics/Light theme.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

BIN
pics/Rachila theme.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

BIN
pics/banner.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

4
requirements.txt Normal file
View file

@ -0,0 +1,4 @@
PyQt5
pynput==1.6.8
sounddevice
pygame

55
themes/Dark Theme.qss Normal file
View file

@ -0,0 +1,55 @@
#background{
background:rgb(48, 48, 48);
}
QWidget{
background: rgb(44, 44, 44);
font: 25 14pt "Calibri Light";
}
QPushButton{
background: rgb(58, 58, 58);
border: none;
}
QPushButton:hover{
background: rgb(53, 53, 53);
}
QListWidget{
margin: 4px;
border: none;
}
QListWidget::item[Custom="true"]{
background: rgb(48, 48, 48);
}
QListWidget::item:hover{
background: rgb(53, 53, 53);
}
QListWidget::item:selected{
background: rgb(48, 48, 48);
color: black;
}
QScrollBar:vertical{
border: 1px transparent rgb(58, 58, 58);
border-radius: 4px;
background: rgb(48, 48, 48);
width: 16px;
}
QScrollBar::handle:vertical{
background: rgb(48, 48, 48);
}
QScrollBar::sub-page:vertical{
background: rgb(58, 58, 58);
}
QScrollBar::add-page:vertical{
background: rgb(58, 58, 58);
}

54
themes/Light Theme.qss Normal file
View file

@ -0,0 +1,54 @@
#background{
background:rgb(248, 248, 248);
}
QWidget{
background: white;
font: 25 14pt "Calibri Light";
}
QPushButton{
background: #eee;
border: none;
}
QPushButton:hover{
background: #f4f4f4;
}
QListWidget{
margin: 4px;
border: none;
}
QListWidget::item[Custom="true"]{
background: #eee;
}
QListWidget::item:hover{
background: #f4f4f4;
}
QListWidget::item:selected{
background: #eee;
color: black;
}
QScrollBar:vertical{
border: 1px transparent #eee;
border-radius: 4px;
background: #eaeaea;
width: 16px;
}
QScrollBar::handle:vertical{
background: #eee;
}
QScrollBar::sub-page:vertical{
background: #f8f8f8;
}
QScrollBar::add-page:vertical{
background: #f8f8f8;
}

120
themes/Rachila Theme.qss Normal file
View file

@ -0,0 +1,120 @@
QWidget{
background: rgb(70, 54, 80);
font: 25 14pt \"Calibri Light\";
}
QLabel{
background: none;
}
QPushButton{
color: rgb(35, 17, 22);
background: rgb(237, 120, 153);
border: none;
}
QPushButton:hover{
background: rgb(182, 92, 118);
}
QListWidget{
margin: 4px;
border: none;
}
QListWidget::item[Custom=\"true\"]{
background: rgb(48, 48, 48);
}
QListWidget::item:hover{
background: rgb(182, 92, 118);
}
QListWidget::item:selected{
background: rgb(47, 41, 50);
color: white;
}
QScrollBar:vertical{
border: 1px transparent rgb(237, 120, 153);
border-radius: 4px;
background: rgb(48, 48, 48);
width: 16px;
}
QScrollBar::handle:vertical{
background: rgb(48, 48, 48);
}
QScrollBar::sub-page:vertical{
background: rgb(188, 87, 116);
}
QScrollBar::add-page:vertical{
background: rgb(99, 70, 114);
}
QSlider::groove:horizontal {
border: none;
background: none;
height: 40px;
margin: -1px;
}
QSlider::handle:horizontal {
background-color: rgb(237, 120, 153);
border: none;
height: 40px;
width: 40px;
margin: -15px 0px;
}
QSlider::sub-page:horizontal {
border: none;
height: 40px;
background: rgb(188, 87, 116);
}
QSlider::add-page:horizontal {
border: none;
height: 40px;
background: rgb(99, 70, 114);
}
#background{
background: rgb(146, 111, 163);
}
#exit_button{
margin-bottom: 1px;
}
#min_button{
margin-bottom: 1px;
}
#pref_button{
background: none;
margin-bottom: 1px;
}
#pref_button:hover{
background: rgba(70, 54, 80, 128);
}
#hotkeys_button{
background: none;
margin-bottom: 1px;
}
#hotkeys_button:hover{
background: rgba(70, 54, 80, 128);
}
#select_label{
background: rgb(32, 25, 36);
color: rgb(237, 120, 153);
}
#catList::item{
padding: 6px;
}
#title{
color: rgb(237, 120, 153);
}
#pref_over{
color: rgb(237, 120, 153);
}
#pref_themes{
color: rgb(237, 120, 153);
}

View file

@ -1,181 +0,0 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'sundpood.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, 450)
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, 450))
MainWindow.setMaximumSize(QtCore.QSize(420, 450))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setEnabled(True)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
self.centralwidget.setSizePolicy(sizePolicy)
self.centralwidget.setMinimumSize(QtCore.QSize(420, 450))
self.centralwidget.setMaximumSize(QtCore.QSize(420, 450))
self.centralwidget.setObjectName("centralwidget")
self.save_button = QtWidgets.QPushButton(self.centralwidget)
self.save_button.setGeometry(QtCore.QRect(10, 360, 401, 71))
font = QtGui.QFont()
font.setFamily("Consolas")
font.setPointSize(28)
self.save_button.setFont(font)
self.save_button.setObjectName("save_button")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(110, 10, 301, 308))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.combo0 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo0.setObjectName("combo0")
self.verticalLayout.addWidget(self.combo0)
self.combo1 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo1.setObjectName("combo1")
self.verticalLayout.addWidget(self.combo1)
self.combo2 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo2.setObjectName("combo2")
self.verticalLayout.addWidget(self.combo2)
self.combo3 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo3.setObjectName("combo3")
self.verticalLayout.addWidget(self.combo3)
self.combo4 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo4.setObjectName("combo4")
self.verticalLayout.addWidget(self.combo4)
self.combo5 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo5.setObjectName("combo5")
self.verticalLayout.addWidget(self.combo5)
self.combo6 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo6.setObjectName("combo6")
self.verticalLayout.addWidget(self.combo6)
self.combo7 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo7.setObjectName("combo7")
self.verticalLayout.addWidget(self.combo7)
self.combo8 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo8.setObjectName("combo8")
self.verticalLayout.addWidget(self.combo8)
self.combo9 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo9.setObjectName("combo9")
self.verticalLayout.addWidget(self.combo9)
self.combo10 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo10.setObjectName("combo10")
self.verticalLayout.addWidget(self.combo10)
self.combo11 = QtWidgets.QComboBox(self.verticalLayoutWidget)
self.combo11.setObjectName("combo11")
self.verticalLayout.addWidget(self.combo11)
self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(10, 10, 91, 308))
self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.verticalLayout_2.addWidget(self.label)
self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
self.verticalLayout_2.addWidget(self.label_2)
self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3")
self.verticalLayout_2.addWidget(self.label_3)
self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_4.setObjectName("label_4")
self.verticalLayout_2.addWidget(self.label_4)
self.label_5 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_5.setObjectName("label_5")
self.verticalLayout_2.addWidget(self.label_5)
self.label_6 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_6.setObjectName("label_6")
self.verticalLayout_2.addWidget(self.label_6)
self.label_7 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_7.setObjectName("label_7")
self.verticalLayout_2.addWidget(self.label_7)
self.label_8 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_8.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_8.setObjectName("label_8")
self.verticalLayout_2.addWidget(self.label_8)
self.label_9 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_9.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_9.setObjectName("label_9")
self.verticalLayout_2.addWidget(self.label_9)
self.label_10 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_10.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_10.setObjectName("label_10")
self.verticalLayout_2.addWidget(self.label_10)
self.label_11 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_11.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_11.setObjectName("label_11")
self.verticalLayout_2.addWidget(self.label_11)
self.label_12 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
self.label_12.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_12.setObjectName("label_12")
self.verticalLayout_2.addWidget(self.label_12)
self.select_label = QtWidgets.QLabel(self.centralwidget)
self.select_label.setGeometry(QtCore.QRect(10, 320, 401, 41))
self.select_label.setLayoutDirection(QtCore.Qt.LeftToRight)
self.select_label.setStyleSheet("background-color: black;")
self.select_label.setText("")
self.select_label.setAlignment(QtCore.Qt.AlignCenter)
self.select_label.setObjectName("select_label")
self.info_label = QtWidgets.QLabel(self.centralwidget)
self.info_label.setGeometry(QtCore.QRect(10, 430, 401, 20))
font = QtGui.QFont()
font.setFamily("Consolas")
self.info_label.setFont(font)
self.info_label.setLayoutDirection(QtCore.Qt.LeftToRight)
self.info_label.setStyleSheet("color: #505050;")
self.info_label.setMidLineWidth(0)
self.info_label.setObjectName("info_label")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "SundPood"))
self.save_button.setText(_translate("MainWindow", "Save"))
self.label.setText(_translate("MainWindow", "F1"))
self.label_2.setText(_translate("MainWindow", "F2"))
self.label_3.setText(_translate("MainWindow", "F3"))
self.label_4.setText(_translate("MainWindow", "F4"))
self.label_5.setText(_translate("MainWindow", "F5"))
self.label_6.setText(_translate("MainWindow", "F6"))
self.label_7.setText(_translate("MainWindow", "F7"))
self.label_8.setText(_translate("MainWindow", "F8"))
self.label_9.setText(_translate("MainWindow", "F9"))
self.label_10.setText(_translate("MainWindow", "F10"))
self.label_11.setText(_translate("MainWindow", "F11"))
self.label_12.setText(_translate("MainWindow", "F12"))
self.info_label.setText(_translate("MainWindow", "Press F1 to open overlay"))