├── icons ├── home.png ├── ._home.png ├── browse.png ├── check.png ├── ._browse.png ├── ._check.png ├── ._setting.png ├── ._youtube.png ├── download.png ├── setting.png ├── youtube.png ├── ._download.png ├── ._home_youtube.png ├── home_download.png ├── home_settings.png ├── home_youtube.png ├── ._home_download.png └── ._home_settings.png ├── testData.txt ├── .idea ├── modules.xml ├── misc.xml ├── Download-Udemy.iml └── workspace.xml ├── photo.qrc ├── README.md ├── .gitignore ├── index.py ├── main.py ├── themes ├── darkorange.css ├── darkblu.css ├── qdarkgray.css └── qdark.css └── main.ui /icons/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/home.png -------------------------------------------------------------------------------- /icons/._home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._home.png -------------------------------------------------------------------------------- /icons/browse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/browse.png -------------------------------------------------------------------------------- /icons/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/check.png -------------------------------------------------------------------------------- /icons/._browse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._browse.png -------------------------------------------------------------------------------- /icons/._check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._check.png -------------------------------------------------------------------------------- /icons/._setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._setting.png -------------------------------------------------------------------------------- /icons/._youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._youtube.png -------------------------------------------------------------------------------- /icons/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/download.png -------------------------------------------------------------------------------- /icons/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/setting.png -------------------------------------------------------------------------------- /icons/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/youtube.png -------------------------------------------------------------------------------- /icons/._download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._download.png -------------------------------------------------------------------------------- /testData.txt: -------------------------------------------------------------------------------- 1 | https://download.sublimetext.com/Sublime%20Text%20Build%203176.dmg 2 | 3 | 4 | /Users/macbook/Desktop -------------------------------------------------------------------------------- /icons/._home_youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._home_youtube.png -------------------------------------------------------------------------------- /icons/home_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/home_download.png -------------------------------------------------------------------------------- /icons/home_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/home_settings.png -------------------------------------------------------------------------------- /icons/home_youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/home_youtube.png -------------------------------------------------------------------------------- /icons/._home_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._home_download.png -------------------------------------------------------------------------------- /icons/._home_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pythondeveloper6/PyQt5-Download-Manager/HEAD/icons/._home_settings.png -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | -------------------------------------------------------------------------------- /photo.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/browse.png 5 | icons/check.png 6 | icons/home.png 7 | icons/youtube.png 8 | icons/setting.png 9 | icons/download.png 10 | icons/home_download.png 11 | icons/home_settings.png 12 | icons/home_youtube.png 13 | 14 | -------------------------------------------------------------------------------- /.idea/Download-Udemy.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyQt5-Download-Manager 2 | PyQt5 simple files , youtube videos and youtube playlist downloader 3 | 4 | 5 | -------------------------------------------------------------------------- 6 | > ### Project Files : 7 | - index.py : the main project file , use it to run the project 8 | - main.py : this is the UI file converted to python code 9 | - main.ui : the UI file , you can edit it in the QtDesigner 10 | - photo.qrc : the qresource file which contains the icons paths 11 | - photo_rc.py : the icons files converted to python code 12 | 13 | 14 | ----------------------------------------------------------------- 15 | > ### How To Run The Code : 16 | first you have to make sure that you have python3 and PyQt5 installed -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # celery beat schedule file 95 | celerybeat-schedule 96 | 97 | # SageMath parsed files 98 | *.sage.py 99 | 100 | # Environments 101 | .env 102 | .venv 103 | env/ 104 | venv/ 105 | ENV/ 106 | env.bak/ 107 | venv.bak/ 108 | 109 | # Spyder project settings 110 | .spyderproject 111 | .spyproject 112 | 113 | # Rope project settings 114 | .ropeproject 115 | 116 | # mkdocs documentation 117 | /site 118 | 119 | # mypy 120 | .mypy_cache/ 121 | .dmypy.json 122 | dmypy.json 123 | 124 | # Pyre type checker 125 | .pyre/ -------------------------------------------------------------------------------- /index.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtGui import * 2 | from PyQt5.QtCore import * 3 | from PyQt5.QtWidgets import * 4 | import sys 5 | 6 | from PyQt5.uic import loadUiType 7 | import urllib.request 8 | #import pafy 9 | #import humanize 10 | 11 | import os 12 | from os import path 13 | 14 | 15 | ui,_ = loadUiType('main.ui') 16 | 17 | class MainApp(QMainWindow , ui): 18 | def __init__(self , parent=None): 19 | super(MainApp , self).__init__(parent) 20 | QMainWindow.__init__(self) 21 | self.setupUi(self) 22 | self.InitUI() 23 | self.Handel_Buttons() 24 | 25 | 26 | def InitUI(self): 27 | ## contain all ui changes in loading 28 | self.tabWidget.tabBar().setVisible(False) 29 | self.Apply_DarkOrange_Style() 30 | 31 | self.Move_Box_1() 32 | self.Move_Box_2() 33 | self.Move_Box_3() 34 | self.Move_Box_4() 35 | 36 | 37 | def Handel_Buttons(self): 38 | ## handel all buttons in the app 39 | self.pushButton.clicked.connect(self.Download) 40 | self.pushButton_2.clicked.connect(self.Handel_Browse) 41 | 42 | self.pushButton_5.clicked.connect(self.Get_Video_Data) 43 | self.pushButton_4.clicked.connect(self.Download_Video) 44 | self.pushButton_3.clicked.connect(self.Save_Browse) 45 | 46 | self.pushButton_7.clicked.connect(self.Playlist_Download) 47 | self.pushButton_6.clicked.connect(self.Playlist_Save_Browse) 48 | 49 | self.pushButton_8.clicked.connect(self.Open_Home) 50 | self.pushButton_9.clicked.connect(self.Open_Download) 51 | self.pushButton_11.clicked.connect(self.Open_Youtube) 52 | self.pushButton_10.clicked.connect(self.Open_Settings) 53 | 54 | 55 | self.pushButton_12.clicked.connect(self.Apply_DarkOrange_Style) 56 | self.pushButton_13.clicked.connect(self.Apply_DarkGray_Style) 57 | self.pushButton_14.clicked.connect(self.Apply_QDark_Style) 58 | self.pushButton_15.clicked.connect(self.Apply_QDarkBlue_Style) 59 | 60 | def Handel_Progress(self , blocknum , blocksize , totalsize): 61 | ## calculate the progress 62 | readed_data = blocknum * blocksize 63 | 64 | if totalsize > 0 : 65 | download_percentage = readed_data * 100 / totalsize 66 | self.progressBar.setValue(download_percentage) 67 | QApplication.processEvents() 68 | 69 | 70 | 71 | 72 | def Handel_Browse(self): 73 | ## enable browseing to our os , pick save location 74 | save_location = QFileDialog.getSaveFileName(self , caption="Save as" , directory="." , filter="All Files(*.*)") 75 | print(save_location) 76 | self.lineEdit_2.setText(str(save_location[0])) 77 | 78 | 79 | 80 | def Download(self): 81 | ## downloading any file 82 | print('Start Download') 83 | 84 | download_url = self.lineEdit.text() 85 | save_location = self.lineEdit_2.text() 86 | 87 | if download_url == '' or save_location == '': 88 | QMessageBox.warning(self , "Data Error" , "Provide a valid URL or save location") 89 | else: 90 | 91 | try: 92 | urllib.request.urlretrieve(download_url , save_location , self.Handel_Progress) 93 | 94 | except Exception: 95 | QMessageBox.warning(self, "Download Error", "Provide a valid URL or save location") 96 | return 97 | 98 | 99 | QMessageBox.information(self , "Download Completed" , "The Download Completed Successfully ") 100 | 101 | self.lineEdit.setText('') 102 | self.lineEdit_2.setText('') 103 | self.progressBar.setValue(0) 104 | 105 | 106 | def Save_Browse(self): 107 | ## save location in the line edit 108 | pass 109 | 110 | 111 | ############################################## 112 | ######## Download Youtube Single Video 113 | def Save_Browse(self): 114 | ## save location in the line edit 115 | save_location = QFileDialog.getSaveFileName(self , caption="Save as" , directory="." , filter="All Files(*.*)") 116 | 117 | 118 | self.lineEdit_4.setText(str(save_location[0])) 119 | 120 | 121 | def Get_Video_Data(self): 122 | 123 | video_url = self.lineEdit_3.text() 124 | print(video_url) 125 | 126 | if video_url == '' : 127 | QMessageBox.warning(self, "Data Error", "Provide a valid Video URL") 128 | 129 | else: 130 | video = pafy.new(video_url) 131 | print(video.title) 132 | print(video.duration) 133 | print(video.author) 134 | print(video.length) 135 | print(video.viewcount) 136 | print(video.likes) 137 | print(video.dislikes) 138 | 139 | video_streams = video.videostreams 140 | for stream in video_streams : 141 | print(stream.get_filesize()) 142 | size = humanize.naturalsize(stream.get_filesize()) 143 | data = "{} {} {} {}".format(stream.mediatype , stream.extension , stream.quality , size) 144 | self.comboBox.addItem(data) 145 | 146 | 147 | 148 | def Download_Video(self): 149 | video_url = self.lineEdit_3.text() 150 | save_location = self.lineEdit_4.text() 151 | 152 | if video_url == '' or save_location == '': 153 | QMessageBox.warning(self, "Data Error", "Provide a valid Video URL or save location") 154 | 155 | else: 156 | video = pafy.new(video_url) 157 | video_stream = video.videostreams 158 | video_quality = self.comboBox.currentIndex() 159 | download = video_stream[video_quality].download(filepath=save_location , callback=self.Video_Progress) 160 | 161 | 162 | 163 | def Video_Progress(self , total , received , ratio , rate , time): 164 | read_data = received 165 | if total > 0 : 166 | download_percentage = read_data * 100 / total 167 | self.progressBar_2.setValue(download_percentage) 168 | remaining_time = round(time/60 , 2) 169 | 170 | self.label_5.setText(str('{} minutes remaining'.format(remaining_time))) 171 | QApplication.processEvents() 172 | 173 | 174 | 175 | ################################################ 176 | ######### Youtube Playlist Download 177 | 178 | def Playlist_Download(self): 179 | playlist_url = self.lineEdit_5.text() 180 | save_location = self.lineEdit_6.text() 181 | 182 | if playlist_url == '' or save_location == '' : 183 | QMessageBox.warning(self, "Data Error", "Provide a valid Playlist URL or save location") 184 | 185 | else: 186 | playlist = pafy.get_playlist(playlist_url) 187 | playlist_videos = playlist['items'] 188 | 189 | self.lcdNumber_2.display(len(playlist_videos)) 190 | 191 | 192 | os.chdir(save_location) 193 | if os.path.exists(str(playlist['title'])): 194 | os.chdir(str(playlist['title'])) 195 | 196 | else: 197 | os.mkdir(str(playlist['title'])) 198 | os.chdir(str(playlist['title'])) 199 | 200 | current_video_in_download = 1 201 | quality = self.comboBox_2.currentIndex() 202 | 203 | 204 | QApplication.processEvents() 205 | 206 | for video in playlist_videos : 207 | current_video = video['pafy'] 208 | current_video_stream = current_video.videostreams 209 | self.lcdNumber.display(current_video_in_download) 210 | download = current_video_stream[quality].download(callback=self.Playlist_Progress) 211 | QApplication.processEvents() 212 | 213 | current_video_in_download +=1 214 | 215 | 216 | 217 | 218 | def Playlist_Progress(self , total , received , ratio , rate , time): 219 | read_data = received 220 | if total > 0 : 221 | download_percentage = read_data * 100 / total 222 | self.progressBar_3.setValue(download_percentage) 223 | remaining_time = round(time/60 , 2) 224 | 225 | self.label_6.setText(str('{} minutes remaining'.format(remaining_time))) 226 | QApplication.processEvents() 227 | 228 | 229 | def Playlist_Save_Browse(self): 230 | playlist_save_location = QFileDialog.getExistingDirectory(self , "Select Download Directory") 231 | self.lineEdit_6.setText(playlist_save_location) 232 | 233 | ################################################ 234 | ###### UI CHanges Methods 235 | def Open_Home(self): 236 | self.tabWidget.setCurrentIndex(0) 237 | 238 | def Open_Download(self): 239 | self.tabWidget.setCurrentIndex(1) 240 | 241 | def Open_Youtube(self): 242 | self.tabWidget.setCurrentIndex(2) 243 | 244 | 245 | def Open_Settings(self): 246 | self.tabWidget.setCurrentIndex(3) 247 | 248 | 249 | ################################################ 250 | ###### App Themes #### 251 | 252 | def Apply_DarkOrange_Style(self): 253 | style = open('themes/darkorange.css' , 'r') 254 | style = style.read() 255 | self.setStyleSheet(style) 256 | 257 | 258 | def Apply_QDark_Style(self): 259 | style = open('themes/qdark.css' , 'r') 260 | style = style.read() 261 | self.setStyleSheet(style) 262 | 263 | 264 | def Apply_DarkGray_Style(self): 265 | style = open('themes/qdarkgray.css' , 'r') 266 | style = style.read() 267 | self.setStyleSheet(style) 268 | 269 | def Apply_QDarkBlue_Style(self): 270 | style = open('themes/darkblu.css' , 'r') 271 | style = style.read() 272 | self.setStyleSheet(style) 273 | 274 | 275 | ########################################## 276 | ####### App Animation 277 | 278 | def Move_Box_1(self): 279 | box_animation1 = QPropertyAnimation(self.groupBox , b"geometry") 280 | box_animation1.setDuration(2500) 281 | box_animation1.setStartValue(QRect(0,0,0,0)) 282 | box_animation1.setEndValue(QRect(60,40,281,141)) 283 | box_animation1.start() 284 | self.box_animation1 = box_animation1 285 | 286 | 287 | def Move_Box_2(self): 288 | box_animation2 = QPropertyAnimation(self.groupBox_2 , b"geometry") 289 | box_animation2.setDuration(2500) 290 | box_animation2.setStartValue(QRect(0,0,0,0)) 291 | box_animation2.setEndValue(QRect(380,40,281,141)) 292 | box_animation2.start() 293 | self.box_animation2 = box_animation2 294 | 295 | 296 | def Move_Box_3(self): 297 | box_animation3 = QPropertyAnimation(self.groupBox_3 , b"geometry") 298 | box_animation3.setDuration(2500) 299 | box_animation3.setStartValue(QRect(0,0,0,0)) 300 | box_animation3.setEndValue(QRect(60,210,281,141)) 301 | box_animation3.start() 302 | self.box_animation3 = box_animation3 303 | 304 | 305 | def Move_Box_4(self): 306 | box_animation4 = QPropertyAnimation(self.groupBox_4 , b"geometry") 307 | box_animation4.setDuration(2500) 308 | box_animation4.setStartValue(QRect(0,0,0,0)) 309 | box_animation4.setEndValue(QRect(380,210,281,141)) 310 | box_animation4.start() 311 | self.box_animation4 = box_animation4 312 | 313 | 314 | def main(): 315 | app = QApplication(sys.argv) 316 | window = MainApp() 317 | window.show() 318 | app.exec_() 319 | 320 | if __name__ == '__main__': 321 | main() -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'main.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.9.2 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(752, 391) 15 | icon = QtGui.QIcon() 16 | icon.addPixmap(QtGui.QPixmap(":/icons/check.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 17 | MainWindow.setWindowIcon(icon) 18 | self.centralwidget = QtWidgets.QWidget(MainWindow) 19 | self.centralwidget.setObjectName("centralwidget") 20 | self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) 21 | self.tabWidget.setGeometry(QtCore.QRect(0, 0, 751, 341)) 22 | self.tabWidget.setObjectName("tabWidget") 23 | self.tab = QtWidgets.QWidget() 24 | self.tab.setObjectName("tab") 25 | self.pushButton = QtWidgets.QPushButton(self.tab) 26 | self.pushButton.setGeometry(QtCore.QRect(310, 221, 131, 51)) 27 | font = QtGui.QFont() 28 | font.setFamily("Euphemia UCAS") 29 | font.setPointSize(16) 30 | self.pushButton.setFont(font) 31 | self.pushButton.setObjectName("pushButton") 32 | self.lineEdit = QtWidgets.QLineEdit(self.tab) 33 | self.lineEdit.setGeometry(QtCore.QRect(130, 60, 521, 31)) 34 | font = QtGui.QFont() 35 | font.setFamily("Euphemia UCAS") 36 | font.setPointSize(15) 37 | self.lineEdit.setFont(font) 38 | self.lineEdit.setObjectName("lineEdit") 39 | self.lineEdit_2 = QtWidgets.QLineEdit(self.tab) 40 | self.lineEdit_2.setGeometry(QtCore.QRect(130, 100, 471, 31)) 41 | font = QtGui.QFont() 42 | font.setFamily("Euphemia UCAS") 43 | font.setPointSize(15) 44 | self.lineEdit_2.setFont(font) 45 | self.lineEdit_2.setObjectName("lineEdit_2") 46 | self.pushButton_2 = QtWidgets.QPushButton(self.tab) 47 | self.pushButton_2.setGeometry(QtCore.QRect(600, 100, 51, 41)) 48 | self.pushButton_2.setText("") 49 | icon1 = QtGui.QIcon() 50 | icon1.addPixmap(QtGui.QPixmap(":/icons/browse.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 51 | self.pushButton_2.setIcon(icon1) 52 | self.pushButton_2.setIconSize(QtCore.QSize(33, 33)) 53 | self.pushButton_2.setObjectName("pushButton_2") 54 | self.progressBar = QtWidgets.QProgressBar(self.tab) 55 | self.progressBar.setGeometry(QtCore.QRect(130, 160, 521, 23)) 56 | self.progressBar.setProperty("value", 0) 57 | self.progressBar.setObjectName("progressBar") 58 | self.tabWidget.addTab(self.tab, "") 59 | self.tab_2 = QtWidgets.QWidget() 60 | self.tab_2.setObjectName("tab_2") 61 | self.tabWidget_2 = QtWidgets.QTabWidget(self.tab_2) 62 | self.tabWidget_2.setGeometry(QtCore.QRect(10, 0, 731, 311)) 63 | self.tabWidget_2.setObjectName("tabWidget_2") 64 | self.tab_3 = QtWidgets.QWidget() 65 | self.tab_3.setObjectName("tab_3") 66 | self.lineEdit_3 = QtWidgets.QLineEdit(self.tab_3) 67 | self.lineEdit_3.setGeometry(QtCore.QRect(110, 20, 451, 41)) 68 | font = QtGui.QFont() 69 | font.setFamily("Euphemia UCAS") 70 | font.setPointSize(15) 71 | self.lineEdit_3.setFont(font) 72 | self.lineEdit_3.setObjectName("lineEdit_3") 73 | self.lineEdit_4 = QtWidgets.QLineEdit(self.tab_3) 74 | self.lineEdit_4.setGeometry(QtCore.QRect(110, 70, 451, 41)) 75 | font = QtGui.QFont() 76 | font.setFamily("Euphemia UCAS") 77 | font.setPointSize(15) 78 | self.lineEdit_4.setFont(font) 79 | self.lineEdit_4.setObjectName("lineEdit_4") 80 | self.pushButton_3 = QtWidgets.QPushButton(self.tab_3) 81 | self.pushButton_3.setGeometry(QtCore.QRect(560, 70, 61, 51)) 82 | self.pushButton_3.setText("") 83 | self.pushButton_3.setIcon(icon1) 84 | self.pushButton_3.setIconSize(QtCore.QSize(33, 33)) 85 | self.pushButton_3.setObjectName("pushButton_3") 86 | self.progressBar_2 = QtWidgets.QProgressBar(self.tab_3) 87 | self.progressBar_2.setGeometry(QtCore.QRect(130, 170, 491, 23)) 88 | self.progressBar_2.setProperty("value", 0) 89 | self.progressBar_2.setObjectName("progressBar_2") 90 | self.pushButton_4 = QtWidgets.QPushButton(self.tab_3) 91 | self.pushButton_4.setGeometry(QtCore.QRect(260, 220, 211, 32)) 92 | font = QtGui.QFont() 93 | font.setFamily("Euphemia UCAS") 94 | self.pushButton_4.setFont(font) 95 | self.pushButton_4.setObjectName("pushButton_4") 96 | self.label = QtWidgets.QLabel(self.tab_3) 97 | self.label.setGeometry(QtCore.QRect(160, 130, 131, 31)) 98 | font = QtGui.QFont() 99 | font.setFamily("Euphemia UCAS") 100 | self.label.setFont(font) 101 | self.label.setObjectName("label") 102 | self.comboBox = QtWidgets.QComboBox(self.tab_3) 103 | self.comboBox.setGeometry(QtCore.QRect(290, 130, 281, 41)) 104 | self.comboBox.setObjectName("comboBox") 105 | self.pushButton_5 = QtWidgets.QPushButton(self.tab_3) 106 | self.pushButton_5.setGeometry(QtCore.QRect(560, 20, 61, 51)) 107 | self.pushButton_5.setText("") 108 | self.pushButton_5.setIcon(icon) 109 | self.pushButton_5.setIconSize(QtCore.QSize(33, 33)) 110 | self.pushButton_5.setObjectName("pushButton_5") 111 | self.tabWidget_2.addTab(self.tab_3, "") 112 | self.tab_4 = QtWidgets.QWidget() 113 | self.tab_4.setObjectName("tab_4") 114 | self.lineEdit_5 = QtWidgets.QLineEdit(self.tab_4) 115 | self.lineEdit_5.setGeometry(QtCore.QRect(120, 20, 501, 31)) 116 | font = QtGui.QFont() 117 | font.setFamily("Euphemia UCAS") 118 | font.setPointSize(15) 119 | self.lineEdit_5.setFont(font) 120 | self.lineEdit_5.setObjectName("lineEdit_5") 121 | self.lineEdit_6 = QtWidgets.QLineEdit(self.tab_4) 122 | self.lineEdit_6.setGeometry(QtCore.QRect(120, 60, 451, 31)) 123 | font = QtGui.QFont() 124 | font.setFamily("Euphemia UCAS") 125 | font.setPointSize(15) 126 | self.lineEdit_6.setFont(font) 127 | self.lineEdit_6.setObjectName("lineEdit_6") 128 | self.pushButton_6 = QtWidgets.QPushButton(self.tab_4) 129 | self.pushButton_6.setGeometry(QtCore.QRect(570, 60, 51, 41)) 130 | self.pushButton_6.setText("") 131 | self.pushButton_6.setIcon(icon1) 132 | self.pushButton_6.setIconSize(QtCore.QSize(33, 33)) 133 | self.pushButton_6.setObjectName("pushButton_6") 134 | self.progressBar_3 = QtWidgets.QProgressBar(self.tab_4) 135 | self.progressBar_3.setGeometry(QtCore.QRect(120, 200, 511, 23)) 136 | self.progressBar_3.setProperty("value", 0) 137 | self.progressBar_3.setObjectName("progressBar_3") 138 | self.label_2 = QtWidgets.QLabel(self.tab_4) 139 | self.label_2.setGeometry(QtCore.QRect(140, 110, 131, 21)) 140 | font = QtGui.QFont() 141 | font.setFamily("Euphemia UCAS") 142 | font.setPointSize(15) 143 | self.label_2.setFont(font) 144 | self.label_2.setObjectName("label_2") 145 | self.comboBox_2 = QtWidgets.QComboBox(self.tab_4) 146 | self.comboBox_2.setGeometry(QtCore.QRect(320, 110, 211, 26)) 147 | self.comboBox_2.setObjectName("comboBox_2") 148 | self.pushButton_7 = QtWidgets.QPushButton(self.tab_4) 149 | self.pushButton_7.setGeometry(QtCore.QRect(270, 240, 201, 32)) 150 | font = QtGui.QFont() 151 | font.setFamily("Euphemia UCAS") 152 | font.setPointSize(15) 153 | self.pushButton_7.setFont(font) 154 | self.pushButton_7.setObjectName("pushButton_7") 155 | self.label_3 = QtWidgets.QLabel(self.tab_4) 156 | self.label_3.setGeometry(QtCore.QRect(120, 160, 131, 16)) 157 | font = QtGui.QFont() 158 | font.setFamily("Euphemia UCAS") 159 | font.setPointSize(15) 160 | self.label_3.setFont(font) 161 | self.label_3.setObjectName("label_3") 162 | self.label_4 = QtWidgets.QLabel(self.tab_4) 163 | self.label_4.setGeometry(QtCore.QRect(330, 160, 161, 21)) 164 | font = QtGui.QFont() 165 | font.setFamily("Euphemia UCAS") 166 | font.setPointSize(15) 167 | self.label_4.setFont(font) 168 | self.label_4.setObjectName("label_4") 169 | self.lcdNumber = QtWidgets.QLCDNumber(self.tab_4) 170 | self.lcdNumber.setGeometry(QtCore.QRect(260, 160, 41, 21)) 171 | self.lcdNumber.setObjectName("lcdNumber") 172 | self.lcdNumber_2 = QtWidgets.QLCDNumber(self.tab_4) 173 | self.lcdNumber_2.setGeometry(QtCore.QRect(500, 160, 41, 21)) 174 | self.lcdNumber_2.setObjectName("lcdNumber_2") 175 | self.tabWidget_2.addTab(self.tab_4, "") 176 | self.tabWidget.addTab(self.tab_2, "") 177 | MainWindow.setCentralWidget(self.centralwidget) 178 | self.menubar = QtWidgets.QMenuBar(MainWindow) 179 | self.menubar.setGeometry(QtCore.QRect(0, 0, 752, 22)) 180 | self.menubar.setObjectName("menubar") 181 | MainWindow.setMenuBar(self.menubar) 182 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 183 | self.statusbar.setObjectName("statusbar") 184 | MainWindow.setStatusBar(self.statusbar) 185 | 186 | self.retranslateUi(MainWindow) 187 | self.tabWidget.setCurrentIndex(0) 188 | self.tabWidget_2.setCurrentIndex(0) 189 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 190 | 191 | def retranslateUi(self, MainWindow): 192 | _translate = QtCore.QCoreApplication.translate 193 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 194 | self.pushButton.setText(_translate("MainWindow", "Download")) 195 | self.lineEdit.setPlaceholderText(_translate("MainWindow", "Enter download link here")) 196 | self.lineEdit_2.setPlaceholderText(_translate("MainWindow", "use browse button to enter save location")) 197 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1")) 198 | self.lineEdit_3.setPlaceholderText(_translate("MainWindow", "Enter video URL")) 199 | self.lineEdit_4.setPlaceholderText(_translate("MainWindow", "User browse button for save location")) 200 | self.pushButton_4.setText(_translate("MainWindow", "Start Download")) 201 | self.label.setText(_translate("MainWindow", "Video Quality")) 202 | self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_3), _translate("MainWindow", "One Video")) 203 | self.lineEdit_5.setPlaceholderText(_translate("MainWindow", "Enter Playlist URL")) 204 | self.lineEdit_6.setPlaceholderText(_translate("MainWindow", "Use browse button to enter save location")) 205 | self.label_2.setText(_translate("MainWindow", "Video Quality")) 206 | self.pushButton_7.setText(_translate("MainWindow", "Start Download")) 207 | self.label_3.setText(_translate("MainWindow", "The Current Video :")) 208 | self.label_4.setText(_translate("MainWindow", "The Full Playlist Video : ")) 209 | self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_4), _translate("MainWindow", "Full Playlist")) 210 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2")) 211 | 212 | import photo_rc 213 | -------------------------------------------------------------------------------- /themes/darkorange.css: -------------------------------------------------------------------------------- 1 | QToolTip 2 | { 3 | border: 1px solid black; 4 | background-color: #ffa02f; 5 | padding: 1px; 6 | border-radius: 3px; 7 | opacity: 100; 8 | } 9 | 10 | QWidget 11 | { 12 | color: #b1b1b1; 13 | background-color: #323232; 14 | } 15 | 16 | QTreeView, QListView 17 | { 18 | background-color: silver; 19 | margin-left: 5px; 20 | } 21 | 22 | QWidget:item:hover 23 | { 24 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #ca0619); 25 | color: #000000; 26 | } 27 | 28 | QWidget:item:selected 29 | { 30 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a); 31 | } 32 | 33 | QMenuBar::item 34 | { 35 | background: transparent; 36 | } 37 | 38 | QMenuBar::item:selected 39 | { 40 | background: transparent; 41 | border: 1px solid #ffaa00; 42 | } 43 | 44 | QMenuBar::item:pressed 45 | { 46 | background: #444; 47 | border: 1px solid #000; 48 | background-color: QLinearGradient( 49 | x1:0, y1:0, 50 | x2:0, y2:1, 51 | stop:1 #212121, 52 | stop:0.4 #343434/*, 53 | stop:0.2 #343434, 54 | stop:0.1 #ffaa00*/ 55 | ); 56 | margin-bottom:-1px; 57 | padding-bottom:1px; 58 | } 59 | 60 | QMenu 61 | { 62 | border: 1px solid #000; 63 | } 64 | 65 | QMenu::item 66 | { 67 | padding: 2px 20px 2px 20px; 68 | } 69 | 70 | QMenu::item:selected 71 | { 72 | color: #000000; 73 | } 74 | 75 | QWidget:disabled 76 | { 77 | color: #808080; 78 | background-color: #323232; 79 | } 80 | 81 | QAbstractItemView 82 | { 83 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #4d4d4d, stop: 0.1 #646464, stop: 1 #5d5d5d); 84 | } 85 | 86 | QWidget:focus 87 | { 88 | /*border: 1px solid darkgray;*/ 89 | } 90 | 91 | QLineEdit 92 | { 93 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #4d4d4d, stop: 0 #646464, stop: 1 #5d5d5d); 94 | padding: 1px; 95 | border-style: solid; 96 | border: 1px solid #1e1e1e; 97 | border-radius: 5; 98 | } 99 | 100 | QPushButton 101 | { 102 | color: #b1b1b1; 103 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646); 104 | border-width: 1px; 105 | border-color: #1e1e1e; 106 | border-style: solid; 107 | border-radius: 6; 108 | padding: 3px; 109 | font-size: 12px; 110 | padding-left: 5px; 111 | padding-right: 5px; 112 | min-width: 40px; 113 | } 114 | 115 | QPushButton:pressed 116 | { 117 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525); 118 | } 119 | 120 | QComboBox 121 | { 122 | selection-background-color: #ffaa00; 123 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646); 124 | border-style: solid; 125 | border: 1px solid #1e1e1e; 126 | border-radius: 5; 127 | } 128 | 129 | QComboBox:hover,QPushButton:hover 130 | { 131 | border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a); 132 | } 133 | 134 | 135 | QComboBox:on 136 | { 137 | padding-top: 3px; 138 | padding-left: 4px; 139 | background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525); 140 | selection-background-color: #ffaa00; 141 | } 142 | 143 | QComboBox QAbstractItemView 144 | { 145 | border: 2px solid darkgray; 146 | selection-background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a); 147 | } 148 | 149 | QComboBox::drop-down 150 | { 151 | subcontrol-origin: padding; 152 | subcontrol-position: top right; 153 | width: 15px; 154 | 155 | border-left-width: 0px; 156 | border-left-color: darkgray; 157 | border-left-style: solid; /* just a single line */ 158 | border-top-right-radius: 3px; /* same radius as the QComboBox */ 159 | border-bottom-right-radius: 3px; 160 | } 161 | 162 | QComboBox::down-arrow 163 | { 164 | image: url(:/dark_orange/img/down_arrow.png); 165 | } 166 | 167 | QGroupBox 168 | { 169 | border: 1px solid darkgray; 170 | margin-top: 10px; 171 | } 172 | 173 | QGroupBox:focus 174 | { 175 | border: 1px solid darkgray; 176 | } 177 | 178 | QTextEdit:focus 179 | { 180 | border: 1px solid darkgray; 181 | } 182 | 183 | QScrollBar:horizontal { 184 | border: 1px solid #222222; 185 | background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 #121212, stop: 0.2 #282828, stop: 1 #484848); 186 | height: 7px; 187 | margin: 0px 16px 0 16px; 188 | } 189 | 190 | QScrollBar::handle:horizontal 191 | { 192 | background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 0.5 #d7801a, stop: 1 #ffa02f); 193 | min-height: 20px; 194 | border-radius: 2px; 195 | } 196 | 197 | QScrollBar::add-line:horizontal { 198 | border: 1px solid #1b1b19; 199 | border-radius: 2px; 200 | background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 1 #d7801a); 201 | width: 14px; 202 | subcontrol-position: right; 203 | subcontrol-origin: margin; 204 | } 205 | 206 | QScrollBar::sub-line:horizontal { 207 | border: 1px solid #1b1b19; 208 | border-radius: 2px; 209 | background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 1 #d7801a); 210 | width: 14px; 211 | subcontrol-position: left; 212 | subcontrol-origin: margin; 213 | } 214 | 215 | QScrollBar::right-arrow:horizontal, QScrollBar::left-arrow:horizontal 216 | { 217 | border: 1px solid black; 218 | width: 1px; 219 | height: 1px; 220 | background: white; 221 | } 222 | 223 | QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal 224 | { 225 | background: none; 226 | } 227 | 228 | QScrollBar:vertical 229 | { 230 | background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0.0 #121212, stop: 0.2 #282828, stop: 1 #484848); 231 | width: 7px; 232 | margin: 16px 0 16px 0; 233 | border: 1px solid #222222; 234 | } 235 | 236 | QScrollBar::handle:vertical 237 | { 238 | background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 0.5 #d7801a, stop: 1 #ffa02f); 239 | min-height: 20px; 240 | border-radius: 2px; 241 | } 242 | 243 | QScrollBar::add-line:vertical 244 | { 245 | border: 1px solid #1b1b19; 246 | border-radius: 2px; 247 | background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a); 248 | height: 14px; 249 | subcontrol-position: bottom; 250 | subcontrol-origin: margin; 251 | } 252 | 253 | QScrollBar::sub-line:vertical 254 | { 255 | border: 1px solid #1b1b19; 256 | border-radius: 2px; 257 | background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d7801a, stop: 1 #ffa02f); 258 | height: 14px; 259 | subcontrol-position: top; 260 | subcontrol-origin: margin; 261 | } 262 | 263 | QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical 264 | { 265 | border: 1px solid black; 266 | width: 1px; 267 | height: 1px; 268 | background: white; 269 | } 270 | 271 | 272 | QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical 273 | { 274 | background: none; 275 | } 276 | 277 | QTextEdit 278 | { 279 | background-color: #242424; 280 | } 281 | 282 | QPlainTextEdit 283 | { 284 | background-color: #242424; 285 | } 286 | 287 | QHeaderView::section 288 | { 289 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #616161, stop: 0.5 #505050, stop: 0.6 #434343, stop:1 #656565); 290 | color: white; 291 | padding-left: 4px; 292 | border: 1px solid #6c6c6c; 293 | } 294 | 295 | QCheckBox:disabled 296 | { 297 | color: #414141; 298 | } 299 | 300 | QDockWidget::title 301 | { 302 | text-align: center; 303 | spacing: 3px; /* spacing between items in the tool bar */ 304 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #323232, stop: 0.5 #242424, stop:1 #323232); 305 | } 306 | 307 | QDockWidget::close-button, QDockWidget::float-button 308 | { 309 | text-align: center; 310 | spacing: 1px; /* spacing between items in the tool bar */ 311 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #323232, stop: 0.5 #242424, stop:1 #323232); 312 | } 313 | 314 | QDockWidget::close-button:hover, QDockWidget::float-button:hover 315 | { 316 | background: #242424; 317 | } 318 | 319 | QDockWidget::close-button:pressed, QDockWidget::float-button:pressed 320 | { 321 | padding: 1px -1px -1px 1px; 322 | } 323 | 324 | QMainWindow::separator 325 | { 326 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434); 327 | color: white; 328 | padding-left: 4px; 329 | border: 1px solid #4c4c4c; 330 | spacing: 3px; /* spacing between items in the tool bar */ 331 | } 332 | 333 | QMainWindow::separator:hover 334 | { 335 | 336 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #d7801a, stop:0.5 #b56c17 stop:1 #ffa02f); 337 | color: white; 338 | padding-left: 4px; 339 | border: 1px solid #6c6c6c; 340 | spacing: 3px; /* spacing between items in the tool bar */ 341 | } 342 | 343 | QToolBar::handle 344 | { 345 | spacing: 3px; /* spacing between items in the tool bar */ 346 | background: url(:/dark_orange/img/handle.png); 347 | } 348 | 349 | QMenu::separator 350 | { 351 | height: 2px; 352 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434); 353 | color: white; 354 | padding-left: 4px; 355 | margin-left: 10px; 356 | margin-right: 5px; 357 | } 358 | 359 | QProgressBar 360 | { 361 | border: 2px solid grey; 362 | border-radius: 5px; 363 | text-align: center; 364 | } 365 | 366 | QProgressBar::chunk 367 | { 368 | background-color: #d7801a; 369 | width: 2.15px; 370 | margin: 0.5px; 371 | } 372 | 373 | QTabBar::tab { 374 | color: #b1b1b1; 375 | border: 1px solid #444; 376 | border-bottom-style: none; 377 | background-color: #323232; 378 | padding-left: 10px; 379 | padding-right: 10px; 380 | padding-top: 3px; 381 | padding-bottom: 2px; 382 | margin-right: -1px; 383 | } 384 | 385 | QTabWidget::pane { 386 | border: 1px solid #444; 387 | top: 1px; 388 | } 389 | 390 | QTabBar::tab:last 391 | { 392 | margin-right: 0; /* the last selected tab has nothing to overlap with on the right */ 393 | border-top-right-radius: 3px; 394 | } 395 | 396 | QTabBar::tab:first:!selected 397 | { 398 | margin-left: 0px; /* the last selected tab has nothing to overlap with on the right */ 399 | 400 | 401 | border-top-left-radius: 3px; 402 | } 403 | 404 | QTabBar::tab:!selected 405 | { 406 | color: #b1b1b1; 407 | border-bottom-style: solid; 408 | margin-top: 3px; 409 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:.4 #343434); 410 | } 411 | 412 | QTabBar::tab:selected 413 | { 414 | border-top-left-radius: 3px; 415 | border-top-right-radius: 3px; 416 | margin-bottom: 0px; 417 | } 418 | 419 | QTabBar::tab:!selected:hover 420 | { 421 | /*border-top: 2px solid #ffaa00; 422 | padding-bottom: 3px;*/ 423 | border-top-left-radius: 3px; 424 | border-top-right-radius: 3px; 425 | background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:0.4 #343434, stop:0.2 #343434, stop:0.1 #ffaa00); 426 | } 427 | 428 | QRadioButton::indicator:checked, QRadioButton::indicator:unchecked{ 429 | color: #b1b1b1; 430 | background-color: #323232; 431 | border: 1px solid #b1b1b1; 432 | border-radius: 6px; 433 | } 434 | 435 | QRadioButton::indicator:checked 436 | { 437 | background-color: qradialgradient( 438 | cx: 0.5, cy: 0.5, 439 | fx: 0.5, fy: 0.5, 440 | radius: 1.0, 441 | stop: 0.25 #ffaa00, 442 | stop: 0.3 #323232 443 | ); 444 | } 445 | 446 | QCheckBox::indicator{ 447 | color: #b1b1b1; 448 | background-color: #323232; 449 | border: 1px solid #b1b1b1; 450 | width: 9px; 451 | height: 9px; 452 | } 453 | 454 | QRadioButton::indicator 455 | { 456 | border-radius: 6px; 457 | } 458 | 459 | QRadioButton::indicator:hover, QCheckBox::indicator:hover 460 | { 461 | border: 1px solid #ffaa00; 462 | } 463 | 464 | QCheckBox::indicator:checked 465 | { 466 | image:url(:/dark_orange/img/checkbox.png); 467 | } 468 | 469 | QCheckBox::indicator:disabled, QRadioButton::indicator:disabled 470 | { 471 | border: 1px solid #444; 472 | } 473 | 474 | 475 | QSlider::groove:horizontal { 476 | border: 1px solid #3A3939; 477 | height: 8px; 478 | background: #201F1F; 479 | margin: 2px 0; 480 | border-radius: 2px; 481 | } 482 | 483 | QSlider::handle:horizontal { 484 | background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, 485 | stop: 0.0 silver, stop: 0.2 #a8a8a8, stop: 1 #727272); 486 | border: 1px solid #3A3939; 487 | width: 14px; 488 | height: 14px; 489 | margin: -4px 0; 490 | border-radius: 2px; 491 | } 492 | 493 | QSlider::groove:vertical { 494 | border: 1px solid #3A3939; 495 | width: 8px; 496 | background: #201F1F; 497 | margin: 0 0px; 498 | border-radius: 2px; 499 | } 500 | 501 | QSlider::handle:vertical { 502 | background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 silver, 503 | stop: 0.2 #a8a8a8, stop: 1 #727272); 504 | border: 1px solid #3A3939; 505 | width: 14px; 506 | height: 14px; 507 | margin: 0 -4px; 508 | border-radius: 2px; 509 | } 510 | 511 | QAbstractSpinBox { 512 | padding-top: 2px; 513 | padding-bottom: 2px; 514 | border: 1px solid darkgray; 515 | 516 | border-radius: 2px; 517 | min-width: 50px; 518 | } 519 | 520 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 194 | 195 | 196 | 208 | 209 | 210 | 211 | 212 | true 213 | DEFINITION_ORDER 214 | 215 | 216 | 217 | 218 | 219 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 |