Example #1
0
class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.statusBar().showMessage('First Button')

        self.rbtn1 = QRadioButton('First Button', self)
        self.rbtn1.move(50, 50)
        self.rbtn1.setChecked(True)
        self.rbtn1.clicked.connect(self.rbtnClicked)

        self.rbtn2 = QRadioButton(self)
        self.rbtn2.move(50, 70)
        self.rbtn2.setText('Second Button')
        self.rbtn2.resize(200, 40)
        self.rbtn2.clicked.connect(self.rbtnClicked)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QRadioButton')
        self.show()

    def rbtnClicked(self):
        if self.rbtn1.isChecked():
            self.statusBar().showMessage('First Button')
        else:
            self.statusBar().showMessage('Second Button')
Example #2
0
    def initUI(self):

        rbtn1 = QRadioButton('First Button', self)
        rbtn1.move(50, 50)
        rbtn1.setChecked(True)

        rbtn2 = QRadioButton(self)
        rbtn2.move(50, 70)
        rbtn2.setText('Second Button')
        rbtn2.resize(200, 40)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QRadioButton')
        self.show()
Example #3
0
    def initUI(self):
        self.statusBar().showMessage('First Button')

        rbtn1 = QRadioButton('First Button', self)
        rbtn1.move(50, 50)
        rbtn1.setChecked(True)
        rbtn1.clicked.connect(self.rbtnClicked)

        rbtn2 = QRadioButton(self)
        rbtn2.move(50, 70)
        rbtn2.setText('Second Button')
        rbtn2.resize(200, 40)
        rbtn2.clicked.connect(self.rbtnClicked)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QRadioButton')
        self.show()
Example #4
0
    def __init__(self):
        global checkboxes, radios
        # Konstruktor von QMainWindow aufrufen
        super().__init__()

        # Fenstergröße und Titel einstellen
        self.setMinimumSize(QSize(300, 200))    
        self.setWindowTitle('Optionen') 

        for i in range(1, 6):
            c = QCheckBox('Checkbox %d' % (i), self)
            c.resize(100, 25)
            c.move(20, 30 * i)
            checkboxes += [c]
            c.toggled.connect(self.toggled)
            
            r = QRadioButton('Button %d' % (i), self)
            r.resize(100, 25)
            r.move(180, 30 * i)
            radios += [r]
            r.toggled.connect(self.toggled)
Example #5
0
class Root(QMainWindow):
    def __init__(self):

        super().__init__()

        self.setFixedSize(600, 800)
        self.title = "Stego Tool"
        self.top = 400
        self.left = 100
        self.width = 400
        self.height = 600

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('About')

        aboutButton = QAction('Details', self)
        aboutButton.setShortcut('Ctrl+i')
        aboutButton.setStatusTip('Application Information')
        aboutButton.triggered.connect(self.About)
        fileMenu.addAction(aboutButton)

        self.InitWindow()

    def InitWindow(self):

        self.setWindowIcon(QtGui.QIcon("flamingo.png"))
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        self.image1 = QLabel(self)
        self.image1.setPixmap(QtGui.QPixmap("flamingo.png"))
        self.image1.resize(100, 100)
        self.image1.move(50, 50)
        self.image1.show()

        self.image2 = QLabel(self)
        self.image2.setPixmap(QtGui.QPixmap("hide.png"))
        self.image2.resize(100, 100)
        self.image2.move(420, 220)
        self.image2.show()

        self.image3 = QLabel(self)
        self.image3.setPixmap(QtGui.QPixmap("file.png"))
        self.image3.resize(100, 100)
        self.image3.move(120, 210)
        self.image3.show()

        self.button1 = QPushButton('Cover File', self)
        self.button1.clicked.connect(self.Cover)
        self.button1.move(100, 310)
        self.button1.resize(100, 40)

        self.button2 = QPushButton('File to embed', self)
        self.button2.clicked.connect(self.Embed)
        self.button2.move(400, 310)
        self.button2.resize(100, 40)

        self.button3 = QPushButton('Launch', self)
        self.button3.clicked.connect(
            lambda: self.Launch(self.radio1.isChecked()))
        self.button3.move(250, 635)
        self.button3.resize(100, 40)

        self.radio1 = QRadioButton('None', self)
        self.radio1.setChecked(True)
        self.radio1.move(100, 480)
        self.radio1.resize(80, 20)

        self.radio2 = QRadioButton('AES', self)
        self.radio2.move(100, 505)
        self.radio2.resize(80, 20)

        self.radio3 = QRadioButton('DES', self)
        self.radio3.move(100, 530)
        self.radio3.resize(80, 20)

        self.radio4 = QRadioButton('Blowfish', self)
        self.radio4.move(100, 555)
        self.radio4.resize(80, 20)

        self.spinbox = QSpinBox(self)
        self.spinbox.move(390, 500)
        self.spinbox.resize(100, 50)
        self.spinbox.setMinimum(1)
        self.spinbox.setMaximum(9)
        self.spinbox.valueChanged.connect(self.Compression)
        self.spinbox.show()

        self.font = QFont("SansSerif")
        self.font.setBold(True)

        self.label1 = QLabel(self)
        self.label1.setFont(self.font)
        self.label1.setText("User-friendly Steganography Tool")
        self.label1.move(220, 90)
        self.label1.resize(400, 20)

        self.label2 = QLabel(self)
        self.label2.setFont(self.font)
        self.label2.setText("Type of Encryption")
        self.label2.move(80, 450)
        self.label2.resize(140, 20)

        self.label3 = QLabel(self)
        self.label3.setFont(self.font)
        self.label3.setText("Quality of Compression")
        self.label3.move(370, 450)
        self.label3.resize(180, 20)

        self.label4 = QLabel(self)
        self.label4.setText("Version: 1.0")
        self.label4.move(50, 780)
        self.label4.resize(180, 20)

        self.label5 = QLabel(self)
        self.label5.setText("License: GPL 3.0")
        self.label5.move(430, 780)
        self.label5.resize(180, 20)

        self.label6 = QLabel(self)
        self.label6.setStyleSheet("color: red; ")
        self.label6.setText("")
        self.label6.move(175, 700)
        self.label6.resize(260, 20)

        self.label7 = QLabel(self)
        self.label7.setStyleSheet("color: green; ")
        self.label7.setText("")
        self.label7.move(195, 700)
        self.label7.resize(260, 20)

        self.show()

    def Cover(self):
        self.file1 = QFileDialog.getOpenFileName(
            self, "Select a File", "/home/",
            "Files (*.jpg *.jpeg *.au *.bmp *.wav)")[0]
        self.button1.setText(os.path.basename(self.file1))
        if self.button1.text() == '':
            self.label6.setText("Cover or Embed File has not been selected.")
            self.button1.setText("Cover File")
        try:
            if self.file1 and self.file2 != '':
                self.label6.setText("")
                self.label7.setText("Your file is ready to be concealed.")
            else:
                self.label7.setText("")
        except AttributeError:
            self.label6.setText("Cover or Embed File has not been selected.")

    def Embed(self):
        self.file2 = QFileDialog.getOpenFileName(self, "Select a File",
                                                 "/home/",
                                                 "All Files (*.*)")[0]
        self.button2.setText(os.path.basename(self.file2))
        if self.button2.text() == '':
            self.button2.setText("File to Embed")
            self.label6.setText("Cover or Embed File has not been selected.")
        try:
            if self.file1 and self.file2 != '':
                self.label6.setText("")
                self.label7.setText("Your file is ready to be concealed.")
            else:
                self.label7.setText("")
        except AttributeError:
            self.label6.setText("Cover or Embed File has not been selected.")

    def Compression(self):
        print(str(self.spinbox.value()))

    def Launch(self, check):
        if self.radio1.isChecked():
            try:
                if self.file1 and self.file2 != '':
                    subprocess.call([
                        'bash', 'launch.sh', '-cf', self.file1, '-ef',
                        self.file2, 'none',
                        str(self.spinbox.value())
                    ])
                    self.label7.setText("Your file is ready to be concealed.")
                else:
                    self.label6.setText(
                        "Cover or Embed File has not been selected.")
            except AttributeError:
                self.label6.setText(
                    "Cover or Embed File has not been selected.")
        if self.radio2.isChecked():
            try:
                if self.file1 and self.file2 != '':
                    subprocess.call([
                        'bash', 'launch.sh', '-cf', self.file1, '-ef',
                        self.file2, 'rijndael-128',
                        str(self.spinbox.value())
                    ])
                    self.label7.setText("Your file is ready to be concealed.")
                else:
                    self.label6.setText(
                        "Cover or Embed File has not been selected.")
            except AttributeError:
                self.label6.setText(
                    "Cover or Embed File has not been selected.")
        if self.radio3.isChecked():
            try:
                if self.file1 and self.file2 != '':
                    subprocess.call([
                        'bash', 'launch.sh', '-cf', self.file1, '-ef',
                        self.file2, 'des',
                        str(self.spinbox.value())
                    ])
                    self.label7.setText("Your file is ready to be concealed.")
                else:
                    self.label6.setText(
                        "Cover or Embed File has not been selected.")
            except AttributeError:
                self.label6.setText(
                    "Cover or Embed File has not been selected.")
        if self.radio4.isChecked():
            try:
                if self.file1 and self.file2 != '':
                    subprocess.call([
                        'bash', 'launch.sh', '-cf', self.file1, '-ef',
                        self.file2, 'blowfish',
                        str(self.spinbox.value())
                    ])
                    self.label7.setText("Your file is ready to be concealed.")
                else:
                    self.label6.setText(
                        "Cover or Embed File has not been selected.")
            except AttributeError:
                self.label6.setText(
                    "Cover or Embed File has not been selected.")

        self.answer = subprocess.call(['bash', 'out.sh'])
        if self.answer == 0:
            self.msg = QMessageBox()
            self.top3 = 600
            self.left3 = 200
            self.width3 = 400
            self.height3 = 600
            self.msg.setGeometry(self.top3, self.left3, self.width3,
                                 self.height3)
            self.msg.setText("Your file has been concealed     ")
            self.msg.show()
        else:
            self.msg = QMessageBox()
            self.top3 = 600
            self.left3 = 200
            self.width3 = 400
            self.height3 = 600
            self.msg.setGeometry(self.top3, self.left3, self.width3,
                                 self.height3)
            self.msg.setText("Something went Wrong      ")
            self.msg.show()

    def About(self):
        self.info = QMessageBox()
        self.top2 = 600
        self.left2 = 200
        self.width2 = 400
        self.height2 = 600
        self.info.setGeometry(self.top2, self.left2, self.width2, self.height2)
        self.info.setWindowTitle("Information")
        self.info.setText("\nThis tool is a free/open-source software \
that helps the user to hide a file inside another file in a user-friendly way. \
\n\n Version: 1.0 \n\n License: GPL v3.0")
        self.info.show()
Example #6
0
class Window(QMainWindow):
    """Main Window."""
    def __init__(self, parent=None):
        """Initializer."""
        super().__init__(parent)
        self.setWindowTitle('Password Genearator')
        self.setGeometry(10, 10, 1000, 800)
        self._createMenu()
        self._createStatusBar()

    def _createMenu(self):
        """ Create menubar. """

        file_menu = self.menuBar().addMenu("File")

        # File Menu - New
        new_action = QAction("&New", self)
        new_action.setStatusTip('Create a new password.')
        new_action.setShortcut('Ctrl+Shift+N')
        new_action.triggered.connect(self.file_new)
        file_menu.addAction(new_action)

        # File Menu - Open
        open_action = QAction("Open", self)
        open_action.setStatusTip('Open password file.')
        open_action.setShortcut('Ctrl+Shift+O')
        open_action.triggered.connect(self.file_open)
        file_menu.addAction(open_action)

        # File Menu - Save
        save_action = QAction("&Save", self)
        save_action.setStatusTip('Save password file.')
        save_action.setShortcut('Ctrl+Shift+S')
        save_action.triggered.connect(self.file_save)
        file_menu.addAction(save_action)

        # File Menu - Delete
        delete_action = QAction("Delete", self)
        delete_action.setStatusTip('Delete password.')
        delete_action.triggered.connect(self.file_delete)
        file_menu.addAction(delete_action)

        file_menu.addSeparator()

        # File Menu - Exit
        exit_action = QAction("&Exit", self)
        exit_action.setStatusTip('Exit application.')
        exit_action.setShortcut('Ctrl+Shift+Q')
        exit_action.triggered.connect(self.close)
        file_menu.addAction(exit_action)

        # About Menu - Help
        about_action = QAction("About", self)
        about_action.setStatusTip('Brief summary about app.')
        about_action.triggered.connect(self.about_help)
        help_menu = self.menuBar().addMenu("Help")
        help_menu.addAction(about_action)

    def _createStatusBar(self):
        """ Create Status Bar """
        status = QStatusBar()
        status.showMessage("Status Bar Area")
        self.setStatusBar(status)

    def file_new(self):
        """ Display fields to capture user data to generate a password """
        # Text box to capture length of password being requested
        self.size_textbox = QLineEdit(self)
        self.size_textbox.move(100, 50)
        self.size_textbox.show()

        # Label for text to capture password length
        self.size_label = QLabel('Password Length', self)
        self.size_label.resize(self.size_label.minimumSizeHint())
        self.size_label.move(210, 50)
        self.size_label.show()

        # Radio button to request PIN
        self.pin_radiobtn = QRadioButton('PIN', self)
        self.pin_radiobtn.resize(self.pin_radiobtn.minimumSizeHint())
        self.pin_radiobtn.move(100, 100)
        self.pin_radiobtn.show()

        # Radio button to request alphanumeric password
        self.alphanum_radiobtn = QRadioButton('Alphanumeric', self)
        self.alphanum_radiobtn.resize(self.alphanum_radiobtn.minimumSizeHint())
        self.alphanum_radiobtn.move(100, 150)
        self.alphanum_radiobtn.show()
        ''' Radio button to request alphanumeric password w/ special characters
        password. '''
        self.special_radiobtn = QRadioButton(
            'Alphanumeric w/ special characters', self)
        self.special_radiobtn.resize(self.special_radiobtn.minimumSizeHint())
        self.special_radiobtn.move(100, 200)
        self.special_radiobtn.show()

        # Button to generate the password when clicked
        self.btn = QPushButton('Generate Password', self)
        self.btn.resize(self.btn.minimumSizeHint())
        self.btn.clicked.connect(self.on_generate_btn_clicked)
        self.btn.move(250, 275)
        self.btn.show()

        # Non-editable text box to display password or error.
        # This box is hide until password or error is returned.
        self.generated_pwd = QLineEdit(self)
        self.generated_pwd.move(60, 325)
        self.generated_pwd.setEnabled(False)
        self.generated_pwd.resize(700, 32)
        self.generated_pwd.hide()

    def file_open(self):
        """ Open file containing passwords. """
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fname = QFileDialog.getOpenFileName(
            self,
            'QFileDialog.getOpenFileNames()',
            '/home/mfsd1809/Dev/FullStackWebDeveloper/GUI/pass-gen/Files',
            'JSON Files (*.json)',
            options=options)
        if fname[0]:
            f = open(fname[0], 'r')

            with f:
                data = json.load(f)
                self.pw = PasswordWindow()
                self.app_label = QLabel(self.pw)
                self.app_label.setText('Application - Password')
                self.app_label.resize(self.app_label.minimumSizeHint())
                self.app_label.move(20, 20)
                self.b = QPlainTextEdit(self.pw)
                count = 1
                for app, pwd in data.items():
                    self.b.insertPlainText(
                        str(count) + '. ' + app + ' - ' + pwd + '\n')
                    count = count + 1
                self.b.setReadOnly(True)
                self.b.move(20, 50)
                self.b.resize(850, 250)
                self.pw.move(100, 150)
                self.pw.show()

    def file_save(self):
        """ Save application name and password to passwords file """
        app, okPressed = QInputDialog.getText(self, "Application Name",
                                              "Enter App Name:",
                                              QLineEdit.Normal, "")
        app = app.lower().strip()
        try:
            if okPressed and app != '' and self.generated_pwd.text() != '':
                # Read JSON file
                with open(
                        '/home/mfsd1809/Dev/FullStackWebDeveloper/GUI/pass-gen/'
                        'Files/passwords.json') as r_file:
                    data = json.load(r_file)
                    # print(json.dumps(data, indent=4))

                # Add/Update JSON file
                data.update({app: self.generated_pwd.text()})

                # Write update to JSON file
                with open(
                        '/home/mfsd1809/Dev/FullStackWebDeveloper/GUI/pass-gen/'
                        'Files/passwords.json', 'w') as w_file:
                    json.dump(data, w_file, indent=4)

                self.get_msg_box(QMessageBox.Information, 'Success',
                                 'Password saved.')
            elif (okPressed and app == ''):
                self.get_msg_box(QMessageBox.Warning, 'Insufficient Data',
                                 'You did not enter an app name.')
        except Exception:
            self.get_msg_box(QMessageBox.Warning, 'Insufficient Data',
                             'No password provided for the app you entered.')

    def file_delete(self):
        """ Delete application name and password from passwords file """
        app, okPressed = QInputDialog.getText(self, "Application Name",
                                              "Enter App Name:",
                                              QLineEdit.Normal, "")
        app = app.lower().strip()
        try:
            if okPressed and app != '':
                # Read JSON file
                with open(
                        '/home/mfsd1809/Dev/FullStackWebDeveloper/GUI/pass-gen/'
                        'Files/passwords.json') as r_file:
                    data = json.load(r_file)
                    # print(json.dumps(data, indent=4))

                # Delete app/password from JSON file
                del data[app]

                # Write update to JSON file
                with open(
                        '/home/mfsd1809/Dev/FullStackWebDeveloper/GUI/pass-gen/'
                        'Files/passwords.json', 'w') as w_file:
                    json.dump(data, w_file, indent=4)

                self.get_msg_box(QMessageBox.Information, 'Success',
                                 'Password deleted.')
            elif (okPressed and app == ''):
                self.get_msg_box(QMessageBox.Warning, 'Insufficient Data',
                                 'You did not enter an app name.')

        except Exception:
            self.get_msg_box(QMessageBox.Warning, 'Insufficient Data',
                             'No password provided for the app you entered.')

    def about_help(self):
        """ Display information about application when Help-->About menu item
            is clicked """
        self.get_msg_box(
            QMessageBox.Information, 'About',
            'This application was created using Python and '
            'PyQt5.  It is used to generate a password based '
            'on the user input of length and selected type.')

    def get_msg_box(self, icon, title, msg):
        """ Message box"""
        self.mb = QMessageBox(self)
        self.mb.setIcon(icon)
        self.mb.setWindowTitle(title)
        self.mb.setText(msg)
        self.mb.setStandardButtons(QMessageBox.Ok)
        self.mb.show()

    def get_pin(self, size):
        """Generate random password, numbers only."""
        # Check if input an integer
        if (isinstance(size, int)):
            # Check if input is positive
            if (size < 0):
                self.get_response('You did not enter a positive integer!',
                                  'error')
            elif (size < 4):
                self.get_response('The number must be greater or equal to 4.',
                                  'error')
            else:
                digits = string.digits
                self.get_response(
                    ''.join(random.choice(digits) for i in range(size)),
                    'success')
        else:
            self.get_response('You did NOT enter an integer!', 'error')

    def get_alphanumeric_password(self, size):
        """ Generate random password, alphanumeric only """
        # Check if input an integer
        if (isinstance(size, int)):
            # Check if input is positive
            if (size < 0):
                self.get_response('You did not enter a positive integer!',
                                  'error')
            elif (size < 8):
                self.get_response('The number must be greater or equal to 8.',
                                  'error')
            else:
                letters_and_digits = string.ascii_letters + string.digits
                self.get_response(
                    ''.join(
                        random.choice(letters_and_digits)
                        for i in range(size)), 'success')
        else:
            self.get_response('You did NOT enter an integer!', 'error')

    def get_alphanumeric_with_symbols_password(self, size):
        """ Generate random password, alphanumeric with symbols included """
        # Check if input an integer
        if (isinstance(size, int)):
            # Check if input is positive
            if (size < 0):
                self.get_response('You did not enter a positive integer!',
                                  'error')
            elif (size < 8):
                self.get_response('The number must be greater or equal to 8.',
                                  'error')
            else:
                letters_digits_symbols = (string.ascii_letters +
                                          string.digits + string.punctuation)
                self.get_response(
                    ''.join(
                        random.choice(letters_digits_symbols)
                        for i in range(size)), 'success')
        else:
            self.get_response('You did NOT enter an integer!', 'error')

    def get_response(self, text, result_type):
        """ Display response from request; password or error in non-editable
            text box """
        self.generated_pwd.setText(text)
        if (result_type == 'error'):
            self.generated_pwd.setStyleSheet("color: rgb(255, 0, 0)")
        else:
            self.generated_pwd.setStyleSheet("color: rgb(0, 153, 0)")
        self.generated_pwd.show()

    def on_generate_btn_clicked(self):
        """ Execute request to generate password with validations """
        try:
            input = self.size_textbox.text().strip()
            if (input == ''):
                self.get_response(
                    'You did not enter a value for password '
                    'length.', 'error')
            else:
                input = int(input)
                if (self.pin_radiobtn.isChecked()):
                    self.get_pin(input)
                elif (self.alphanum_radiobtn.isChecked()):
                    self.get_alphanumeric_password(input)
                elif (self.special_radiobtn.isChecked()):
                    self.get_alphanumeric_with_symbols_password(input)
                else:
                    self.get_response('You must select a password option.',
                                      'error')
        except ValueError:
            self.get_response('You entered a string.', 'error')
Example #7
0
class DownMusic(QMainWindow):
    def __init__(self):
        super().__init__()
        self.StartGui()
        self.bt3.setEnabled(False)

    def update(self, result):
        # 更新文字内容
        if result == 'Clear now':
            self.text.clear()
        elif result == 'have finished':
            self.text.append('歌单下载完成')
            self.bt1.setEnabled(True)
        elif result == 'finished':
            self.bt1.setEnabled(True)
        else:
            self.text.append(result)

    def StartDown(self):
        # 开始下载
        if self.platform == '':
            self.text.clear()
            self.text.append('请选择平台')
        else:
            if (self.input1.text() == ''):
                pass
            else:
                url = self.input1.text()
                path = self.input2.text()
                platform = self.platform
                self.result = Downthread(url, path, platform)
                self.result.signal.connect(self.update)
                self.result.start()
                self.bt1.setEnabled(False)
                self.bt3.setEnabled(True)

    def Stop(self):
        # 停止下载
        self.result.status = False
        self.bt1.setEnabled(True)

    def SelectPath(self):
        # 选择路径
        path = QFileDialog.getExistingDirectory(self, '选取文件夹', './')
        self.input2.setText(path)

    def select_platform(self):
        # 选择平台
        if self.qr1.isChecked():
            self.platform = 'wangyi'
        elif self.qr2.isChecked():
            self.platform = 'kuwo'
        elif self.qr3.isChecked():
            self.platform = 'qqmusic'

    def StartGui(self):
        # 启动界面
        def screencenter():
            # 屏幕居中
            desktop = QApplication.desktop()
            screenrect = desktop.screenGeometry()
            scr_w = screenrect.width()
            scr_h = screenrect.height()
            cen_w = (scr_w - 974) / 2
            cen_h = (scr_h - 730) / 2
            return cen_w, cen_h

        def AboutUs():
            # 关于
            MsgBox = QMessageBox(
                QMessageBox.NoIcon, '关于我们',
                '这只是一个用来方便下载的工具\n感谢\nCharles提供的酷我音乐\n\npowered by Nobilta \nVersion:3.0'
            )
            MsgBox.exec()

        def Help():
            # 帮助
            Msgbox = QMessageBox(
                QMessageBox.NoIcon, '帮助',
                '复制一个单曲(歌单),粘贴到工具中,选择平台,点击下载,默认路径为D:\\MusicDownload(-歌单名)\n如遇下载失败,建议尝试其他平台 '
            )
            Msgbox.exec()

        self.platform = ''
        w, h = screencenter()
        # 背景图片
        palette = QtGui.QPalette()
        palette.setBrush(QPalette.Background, QBrush(QPixmap("bg.jpg")))

        # 文字标签
        self.lb1 = QLabel("请输入单曲(歌单)链接:", self)
        self.lb1.resize(350, 25)
        self.lb1.move(18, 32)
        self.lb1.setStyleSheet('color:#696969')
        self.lb1.setFont(QFont("微软雅黑", 15))

        # 输入框
        self.input1 = QLineEdit(self)
        self.input1.resize(700, 20)
        self.input1.move(18, 85)
        self.input1.setPlaceholderText("请输入链接")
        self.input1.setFont(QFont("Arial", 14))
        self.input1.setStyleSheet(
            "background:transparent;border-width:0;border-style:outset;color:#696969;font-style:italic"
        )

        self.lb2 = QLabel(
            "————————————————————————————————————————————————————————————————————",
            self)
        self.lb2.resize(700, 15)
        self.lb2.move(18, 108)
        self.lb2.setFont(QFont("微软雅黑", 11))
        self.lb2.setStyleSheet("color:#696969")

        # 下载按钮
        self.bt1 = QPushButton("下载", self)
        self.bt1.resize(60, 30)
        self.bt1.move(740, 90)
        self.bt1.setFont(QFont("微软雅黑", 9))
        self.bt1.setStyleSheet(
            "background:#7ccee3;color:white;border-radius:15px")
        self.bt1.clicked.connect(self.StartDown)

        # 停止按钮
        self.bt3 = QPushButton("停止", self)
        self.bt3.resize(60, 30)
        self.bt3.move(820, 90)
        self.bt3.setFont(QFont("微软雅黑", 9))
        self.bt3.setStyleSheet(
            "background:#FD9892;color:white;border-radius:15px")
        self.bt3.clicked.connect(self.Stop)

        # 选择按钮
        self.qr1 = QRadioButton('网易云音乐', self)
        self.qr1.resize(120, 30)
        self.qr1.move(20, 125)
        self.qr1.setFont(QFont('微软雅黑', 11))
        self.qr1.setStyleSheet('color:blue')
        self.qr1.clicked.connect(self.select_platform)
        self.qr2 = QRadioButton('酷我音乐', self)
        self.qr2.resize(120, 30)
        self.qr2.move(150, 125)
        self.qr2.setFont(QFont('微软雅黑', 11))
        self.qr2.setStyleSheet('color:blue')
        self.qr2.clicked.connect(self.select_platform)
        self.qr3 = QRadioButton("QQ音乐", self)
        self.qr3.resize(120, 30)
        self.qr3.move(270, 125)
        self.qr3.setFont(QFont('微软雅黑', 11))
        self.qr3.setStyleSheet('color:blue')
        self.qr3.clicked.connect(self.select_platform)
        # 显示框
        self.text = QTextBrowser(self)
        self.text.resize(800, 430)
        self.text.move(87, 170)
        self.text.setFont(QFont("微软雅黑", 13))
        self.text.setStyleSheet(
            "background:transparent;color:#696969;border-color:#696969")

        # 设置路径
        self.input2 = QLineEdit(self)
        self.input2.resize(615, 25)
        self.input2.move(185, 623)
        self.input2.setFont(QFont("Arial", 12))
        self.input2.setStyleSheet(
            "background:transparent;color:#696969;border-width:0;border-style:outset"
        )
        self.lb3 = QLabel("选择路径:", self)
        self.lb3.resize(100, 30)
        self.lb3.move(80, 620)
        self.lb3.setFont(QFont("微软雅黑", 14))
        self.lb3.setStyleSheet("color:#696969")
        self.lb4 = QLabel(
            "————————————————————————————————————————————————————————————————————",
            self)
        self.lb4.resize(615, 35)
        self.lb4.move(185, 630)
        self.lb4.setStyleSheet("color:#696969")
        self.lb4.setFont(QFont("微软雅黑", 13))

        # 选择路径按钮
        self.bt2 = QPushButton("选择", self)
        self.bt2.resize(60, 30)
        self.bt2.move(830, 623)
        self.bt2.setFont(QFont("微软雅黑", 9))
        self.bt2.setStyleSheet(
            "background:#7ccee3;color:white;border-radius:15px")
        self.bt2.clicked.connect(self.SelectPath)

        # 关于/帮助按钮
        self.bt4 = QPushButton('关于', self)
        self.bt4.resize(50, 20)
        self.bt4.move(450, 680)
        self.bt4.setFont(QFont('微软雅黑', 9))
        self.bt4.setStyleSheet(
            'background:transparent;color:blue;border-width:0')
        self.bt4.clicked.connect(AboutUs)
        self.bt5 = QPushButton('帮助', self)
        self.bt5.resize(50, 20)
        self.bt5.move(500, 680)
        self.bt5.setFont(QFont('微软雅黑', 9))
        self.bt5.setStyleSheet(
            'background:transparent;color:blue;border-width:0')
        self.bt5.clicked.connect(Help)

        # 初始化
        self.setPalette(palette)
        self.setGeometry(w, h, 974, 730)
        self.setFixedSize(974, 730)
        self.setWindowTitle('MusicDownloader V3.0')
        self.setWindowIcon(QIcon('ico.jpg'))
        self.setAutoFillBackground(True)
        self.text.setText("准备就绪")
        self.show()
        os.remove('bg.jpg')
        os.remove('ico.jpg')
        self.result = None
class TabCadastro(QWidget):
    def __init__(self):
        super().__init__()
        self.labels()
        self.text_fields()
        self.buttons()

    def labels(self):
        self.label_nome = QLabel(self)
        self.label_nome.setText('Nome:')
        self.label_nome.setStyleSheet(
            'QLabel {font:bold;font-size:20;color:"Black"}')
        self.label_nome.move(2, 25)
        self.label_nome.resize(100, 20)

        self.label_endereco = QLabel(self)
        self.label_endereco.setText('Endereço:')
        self.label_endereco.setStyleSheet(
            'QLabel {font:bold;font-size:20;color:"Black"}')
        self.label_endereco.move(2, 50)
        self.label_endereco.resize(100, 20)

        self.label_telefone = QLabel(self)
        self.label_telefone.setText('Telefone:')
        self.label_telefone.setStyleSheet(
            'QLabel {font:bold;font-size:20;color:"Black"}')
        self.label_telefone.move(2, 75)
        self.label_telefone.resize(100, 20)

        self.label_cpf = QLabel(self)
        self.label_cpf.setText('CPF:')
        self.label_cpf.setStyleSheet(
            'QLabel {font:bold;font-size:20;color:"Black"}')
        self.label_cpf.move(2, 100)
        self.label_cpf.resize(100, 20)

        self.label_nconta = QLabel(self)
        self.label_nconta.setText('Nº da Conta:')
        self.label_nconta.setStyleSheet(
            'QLabel {font:bold;font-size:20;color:"Black"}')
        self.label_nconta.move(2, 125)
        self.label_nconta.resize(100, 20)

        self.label_imagem = QLabel(self)
        self.label_imagem.setPixmap(QPixmap('logotipo.png'))
        self.label_imagem.move(215, 20)
        self.label_imagem.resize(175, 175)

    def text_fields(self):
        self.field_Nome = QLineEdit(self)
        self.field_Nome.move(100, 25)
        self.field_Nome.resize(87, 20)

        self.field_Endereco = QLineEdit(self)
        self.field_Endereco.move(100, 50)
        self.field_Endereco.resize(87, 20)

        self.field_Telefone = QLineEdit(self)
        self.field_Telefone.setInputMask('(##)#####-####')
        self.field_Telefone.move(100, 75)
        self.field_Telefone.resize(87, 20)

        self.field_cpf = QLineEdit(self)
        self.field_cpf.setInputMask('###.###.###-##')
        self.field_cpf.move(100, 100)
        self.field_cpf.resize(87, 20)

        self.field_nConta = QLineEdit(self)
        self.field_nConta.setInputMask('###')
        self.field_nConta.move(100, 125)
        self.field_nConta.resize(87, 20)

        hboxlayout = QHBoxLayout()

        self.radioContaSimples = QRadioButton('Conta Simples', self)
        self.radioContaSimples.setStyleSheet(
            'QRadioButton {font:bold;font-size:20;color:"Black"}')
        self.radioContaSimples.move(2, 150)
        self.radioContaSimples.resize(120, 20)
        hboxlayout.addWidget(self.radioContaSimples)

        self.radioContaEspecial = QRadioButton('Conta Especial', self)
        self.radioContaEspecial.setStyleSheet(
            'QRadioButton {font:bold;font-size:20;color:"#Black"}')
        self.radioContaEspecial.move(2, 172)
        self.radioContaEspecial.resize(120, 20)
        hboxlayout.addWidget(self.radioContaEspecial)

    def buttons(self):
        self.Button_Cadastrar = QPushButton('Cadastrar', self)
        self.Button_Cadastrar.move(150, 225)
        self.Button_Cadastrar.resize(87, 20)
        self.Button_Cadastrar.clicked.connect(self.cadastrar_clicked)

    def cadastrar_clicked(self):
        self.conn = sqlite3.connect("Conta_UAM.db")
        self.csr = self.conn.cursor()
        self.csr.execute("SELECT num_conta FROM contas")
        lista_contas = self.csr.fetchall()
        lista = [list(lista_contas[x]) for x in range(len(lista_contas))]
        rows = [lista[x][0] for x in range(len(lista))]

        if self.field_Nome.text() == '' or self.field_Endereco.text() == '' or self.field_Telefone.text() == '' \
                or self.field_cpf.text() == '' or self.field_nConta.text() == '':
            erro = QMessageBox()
            erro.setWindowTitle('Erro!')
            erro.setText('Tem algo faltando no seu cadastro!')
            erro.setIcon(QMessageBox.Critical)
            x = erro.exec_()
        elif self.field_nConta.text() in rows:
            erro = QMessageBox()
            erro.setWindowTitle('Erro!')
            erro.setText('Este número de conta já existe !')
            erro.setIcon(QMessageBox.Critical)
            x = erro.exec_()

        elif self.radioContaSimples.isChecked(
        ) == False and self.radioContaEspecial.isChecked() == False:
            erro = QMessageBox()
            erro.setWindowTitle('Erro!')
            erro.setText('Selecione o tipo de conta!')
            erro.setIcon(QMessageBox.Critical)
            x = erro.exec_()
        else:
            self.sucesso()

    def sucesso(self):
        nome = self.field_Nome.text()
        endereco = self.field_Endereco.text()
        fone = self.field_Telefone.text()
        cpf = self.field_cpf.text()
        num_conta = self.field_nConta.text()
        if self.radioContaSimples.isChecked():
            tipo_conta = self.radioContaSimples.text()
            limite = 0
            saldo = limite
        elif self.radioContaEspecial.isChecked():
            tipo_conta = self.radioContaEspecial.text()
            limite = 500
            saldo = 0

        try:
            self.conn = sqlite3.connect("Conta_UAM.db")
            self.csr = self.conn.cursor()
            self.csr.execute(
                """
        		INSERT INTO contas (nome, endereco, fone, cpf, num_conta, saldo, tipo_conta, limite)
        		VALUES (?,?,?,?,?,?,?,?)
        		""", (nome, endereco, fone, cpf, num_conta, saldo, tipo_conta,
                limite))
            self.conn.commit()
        except Exception as e:
            self.errors(e)

        Cadastrado = QMessageBox()
        Cadastrado.setWindowTitle('Cadastro Concluido!')
        Cadastrado.setText('Conta cadastrada com sucesso!')
        Cadastrado.setIcon(QMessageBox.Information)
        x = Cadastrado.exec_()
        self.field_Nome.clear()
        self.field_Endereco.clear()
        self.field_Telefone.clear()
        self.field_cpf.clear()
        self.field_nConta.clear()
        self.radioContaSimples.setChecked(False)
        self.radioContaEspecial.setChecked(False)

    def errors(self, e):
        hora = QTime.currentTime()
        hr_err = hora.toString("hh:mm:ss")
        exc_type, exc_obj, exc_tb = sys.exc_info()
        fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
        err = f"{hr_err} \n{e} \n{exc_type} \n{fname} \n{exc_tb.tb_lineno} \n"
        print(err)
Example #9
0
class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    # создание переменных, списков, словарей; считывание музыкальных файлов из папки
    def initUI(self):
        self.setGeometry(400, 200, 1100, 700)
        self.setWindowTitle('AudioPlayer')

        image = QImage("backgroundv.png")
        image_size = image.scaled(QSize(1100, 700))
        palette = QPalette()
        palette.setBrush(QPalette.Window, QBrush(image_size))
        self.setPalette(palette)

        self.filter_field = QLabel(self)
        self.filter_field.move(10, 20)
        self.filter_field.resize(270, 660)
        self.filter_field.setStyleSheet("QLabel { border-style: solid; "
                                        "border-width: 2px; "
                                        "border-color: #7E12AA }")

        self.search = QLineEdit(self)
        self.search.move(20, 70)
        self.search.resize(210, 30)
        self.search.setStyleSheet('QLineEdit { background-color: #FFFFFF }')

        self.searc_button = QPushButton('🔍', self)
        self.searc_button.move(230, 70)
        self.searc_button.resize(30, 30)
        self.searc_button.setStyleSheet('QPushButton { background-color: #CB0077; '
                                        'color: #FFFFFF }')
        self.searc_button.clicked.connect(self.clicked_search_button)

        self.musician = QLabel('Исполнитель: ', self)
        self.musician.move(20, 150)
        self.musician.setStyleSheet('QLabel { color: #FFFFFF }')

        self.artists_list = QComboBox(self)
        self.artists_list.addItem('любой')
        self.artists_list.resize(150, 30)
        self.artists_list.move(110, 150)
        self.artists_list.setStyleSheet('QComboBox { background-color: #FFFFFF }')

        self.year = QLabel('Год: ', self)
        self.year.move(20, 230)
        self.year.setStyleSheet('QLabel { color: #FFFFFF }')

        self._from = QLabel('с', self)
        self._from.move(90, 230)
        self._from.setStyleSheet('QLabel { color: #FFFFFF }')

        self.list_of_years = QComboBox(self)
        self.list_of_years.addItem('любой')
        self.list_of_years.resize(150, 30)
        self.list_of_years.move(110, 230)
        self.list_of_years.setStyleSheet('QComboBox { background-color: #FFFFFF }')

        self._to = QLabel('по', self)
        self._to.move(90, 270)
        self._to.setStyleSheet('QLabel { color: #FFFFFF }')

        self.second_list_of_years = QComboBox(self)
        self.second_list_of_years.addItem('любой')
        self.second_list_of_years.resize(150, 30)
        self.second_list_of_years.move(110, 270)
        self.second_list_of_years.setStyleSheet('QComboBox { background-color: #FFFFFF }')

        self.album = QLabel('Альбом: ', self)
        self.album.move(20, 190)
        self.album.setStyleSheet('QLabel { color: #FFFFFF }')

        self.album_combobox = QComboBox(self)
        self.album_combobox.addItem('любой')
        self.album_combobox.resize(150, 30)
        self.album_combobox.move(110, 190)
        self.album_combobox.setStyleSheet('QComboBox { background-color: #FFFFFF }')

        self.second_search = QPushButton('🔍', self)
        self.second_search.move(20, 330)
        self.second_search.resize(240, 30)
        self.second_search.setStyleSheet('QPushButton { background-color: #CB0077; '
                                         'color: #FFFFFF }')
        self.second_search.clicked.connect(self.clicked_second_search_button)

        self.name = QRadioButton('По названию', self)
        self.name.move(20, 400)
        self.name.setStyleSheet('QRadioButton { color: #FFFFFF }')

        self.length = QRadioButton('По увеличению длительности', self)
        self.length.move(20, 430)
        self.length.resize(255, 20)
        self.length.setStyleSheet('QRadioButton { color: #FFFFFF }')

        self.button_group = QButtonGroup(self)
        self.button_group.addButton(self.name)
        self.button_group.addButton(self.length)
        self.button_group.buttonClicked.connect(self.radiobutton_clicked)

        self.music_list = QListWidget(self)
        self.music_list.setFont(QtGui.QFont('Consolas'))
        self.music_list.setStyleSheet('QListWidget { background-color: #FFFFFF; '
                                      'color: #000000 }')

        self.area = QScrollArea(self)
        self.area.setWidgetResizable(True)
        self.area.move(290, 220)
        self.area.resize(780, 460)
        self.area.setWidget(self.music_list)

        self.layoutV = QVBoxLayout(self)
        self.layoutV.addWidget(self.area)
        self.setLayout(self.layoutV)

        self.track_info = QLabel(self)
        self.track_info.move(290, 20)
        self.track_info.resize(780, 190)
        self.track_info.setStyleSheet("QLabel { border-width: 2px; "
                                      "border-style: solid; "
                                      "border-color: #7E12AA; "
                                      "background-color: #9015C1 }")

        self.track_name = QLabel(self)
        self.track_name.resize(780, 20)
        self.track_name.move(300, 30)
        self.track_name.setFont(QtGui.QFont('Segoe UI', 10))
        self.track_name.setStyleSheet('QLabel { color: #FFFFFF }')

        self.track_artist = QLabel(self)
        self.track_artist.resize(780, 20)
        self.track_artist.move(300, 60)
        self.track_artist.setFont(QtGui.QFont('Segoe UI', 10))
        self.track_artist.setStyleSheet('QLabel { color: #FFFFFF }')

        self.track_album = QLabel(self)
        self.track_album.resize(780, 20)
        self.track_album.move(300, 90)
        self.track_album.setFont(QtGui.QFont('Segoe UI', 10))
        self.track_album.setStyleSheet('QLabel { color: #FFFFFF }')

        self.track_year = QLabel(self)
        self.track_year.resize(780, 20)
        self.track_year.move(300, 120)
        self.track_year.setFont(QtGui.QFont('Segoe UI', 10))
        self.track_year.setStyleSheet('QLabel { color: #FFFFFF }')

        self.track_length = QLabel(self)
        self.track_length.resize(780, 20)
        self.track_length.move(300, 150)
        self.track_length.setFont(QtGui.QFont('Segoe UI', 10))
        self.track_length.setStyleSheet('QLabel { color: #FFFFFF }')

        self.artists = []

        self.albums = []

        self.years = []

        self.years2 = []

        self.length_of_track = {}

        for file in os.listdir(os.getcwd() + '/music'):
            filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
            if file_extension == '.mp3':
                track = ID3(os.getcwd() + '/music/' + file)
                mp3_track = MP3(os.getcwd() + '/music/' + file)
                tit_num = len(track['TIT2'].text[0])
                space = 77 - tit_num
                self.music_list.addItem(track['TIT2'].text[0] + space * ' ' + track['TPE1'].text[0])
                self.length_of_track[mp3_track.info.length] = track['TIT2'].text[0]
                if track['TPE1'].text[0] not in self.artists:
                    self.artists.append(track['TPE1'].text[0])
                if str(mp3_track['date'])[2:-2] not in self.years:
                    self.years.append(str(mp3_track['date'])[2:-2])
                if str(mp3_track['date'])[2:-2] not in self.years2:
                    self.years2.append(str(mp3_track['date'])[2:-2])
                if track['TALB'].text[0] not in self.albums:
                    self.albums.append(track['TALB'].text[0])
        self.years = sorted(self.years)
        self.years2 = sorted(self.years2)
        for i in self.artists:
            self.artists_list.addItem(i)
        for year in self.years:
            self.list_of_years.addItem(year)
        for year2 in self.years2:
            self.second_list_of_years.addItem(year2)
        for alb in self.albums:
            self.album_combobox.addItem(alb)

        self.music_list.itemClicked.connect(self.clicked_item)

        self.music_list.itemDoubleClicked.connect(self.double_clicked_item)

    # поиск совпадений по исполнителю, названию или альбому
    def clicked_search_button(self):
        line = self.search.text()
        self.music_list.clear()
        for file in os.listdir(os.getcwd() + '/music'):
            filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
            if file_extension == '.mp3':
                track = ID3(os.getcwd() + '/music/' + file)
                if line.lower() in track['TIT2'].text[0].lower() or line in track['TPE1'].text[0].lower() \
                        or line in track['TALB'].text[0].lower():
                    tit_num = len(track['TIT2'].text[0])
                    space = 77 - tit_num
                    self.music_list.addItem(track['TIT2'].text[0] + space * ' ' + track['TPE1'].text[0])

    # фильтр по испонителю, альбому и году
    def clicked_second_search_button(self):
        artist_value = self.artists_list.currentText()
        album_value = self.album_combobox.currentText()
        first_year_value = self.list_of_years.currentText()
        second_year_value = self.second_list_of_years.currentText()
        possible_years = self.years
        if first_year_value != 'любой' and second_year_value != 'любой':
            num1 = self.years.index(first_year_value)
            num2 = self.years.index(second_year_value)
            possible_years = self.years[num1:num2 + 1]
        if first_year_value == 'любой' and second_year_value != 'любой':
            num2 = self.years.index(second_year_value)
            possible_years = self.years[:num2 + 1]
        if first_year_value != 'любой' and second_year_value == 'любой':
            num1 = self.years.index(first_year_value)
            possible_years = self.years[num1:]
        if first_year_value == 'любой' and second_year_value == 'любой':
            possible_years = self.years
        if artist_value == 'любой':
            possible_artist = self.artists
        else:
            possible_artist = [artist_value]
        if album_value == 'любой':
            possible_album = self.albums
        else:
            possible_album = [album_value]

        self.music_list.clear()

        for file in os.listdir(os.getcwd() + '/music'):
            filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
            if file_extension == '.mp3':
                track = ID3(os.getcwd() + '/music/' + file)
                mp3_track = MP3(os.getcwd() + '/music/' + file)
                if track['TPE1'].text[0] in possible_artist and \
                        str(mp3_track['date'])[2:-2] in possible_years \
                        and track['TALB'].text[0] in possible_album:
                    tit_num = len(track['TIT2'].text[0])
                    space = 77 - tit_num
                    self.music_list.addItem(track['TIT2'].text[0] + space * ' ' + track['TPE1'].text[0])

    # сортировка песен по названию или длительности
    def radiobutton_clicked(self, button):
        criterion = button.text()
        all_items = []
        list_of_current_length = {}
        for i in range(self.music_list.count()):
            index = self.music_list.item(i).text().find('   ')
            item = self.music_list.item(i).text()[:index]
            all_items.append(item)
        print(all_items)
        if criterion == 'По увеличению длительности':
            for file in os.listdir(os.getcwd() + '/music'):
                filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
                if file_extension == '.mp3':
                    track = ID3(os.getcwd() + '/music/' + file)
                    if track['TIT2'].text[0] in all_items:
                        mp3_track = MP3(os.getcwd() + '/music/' + file)
                        list_of_current_length[mp3_track.info.length] = track['TIT2'].text[0]
            self.music_list.clear()
            for key, value in sorted(list_of_current_length.items(), key=lambda x: x[0]):
                for file in os.listdir(os.getcwd() + '/music'):
                    filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
                    if file_extension == '.mp3':
                        track = ID3(os.getcwd() + '/music/' + file)
                        if track['TIT2'].text[0] == value:
                            tit_num = len(track['TIT2'].text[0])
                            space = 77 - tit_num
                            self.music_list.addItem(track['TIT2'].text[0] + space * ' ' + track['TPE1'].text[0])
        else:
            self.music_list.sortItems()

    # выведение информации о песне
    def clicked_item(self, item):
        temp_name = item.text()
        number = temp_name.find('   ')
        final_name = temp_name[:number]
        for file in os.listdir(os.getcwd() + '/music'):
            filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
            if file_extension == '.mp3':
                checked_track = ID3(os.getcwd() + '/music/' + file)
                checked_track2 = MP3(os.getcwd() + '/music/' + file)
                if final_name == checked_track['TIT2'].text[0]:
                    self.track_name.clear()
                    self.track_name.setText('Название: ' + checked_track['TIT2'].text[0])
                    self.track_artist.clear()
                    self.track_artist.setText('Исполнитель: ' + checked_track['TPE1'].text[0])
                    self.track_album.clear()
                    self.track_album.setText('Альбом: ' + checked_track['TALB'].text[0])
                    self.track_year.clear()
                    self.track_year.setText('Год: ' + str(checked_track2['date'])[2:-2])
                    self.track_length.clear()
                    self.track_length.setText('Длительность: ' + str(checked_track2.info.length // 60)[0] +
                                              ':' + str(round(checked_track2.info.length % 60)).zfill(2))

    # воспроизведение песни
    def double_clicked_item(self, item):
        name1 = item.text()
        number = name1.find('   ')
        final_name = name1[:number]
        for file in os.listdir(os.getcwd() + '/music'):
            filename, file_extension = os.path.splitext(os.getcwd() + '/music/' + file)
            if file_extension == '.mp3':
                checked_track = ID3(os.getcwd() + '/music/' + file)
                if final_name == checked_track['TIT2'].text[0]:
                    os.startfile(os.getcwd() + '/music/' + file)
Example #10
0
class Root(QMainWindow):

    def __init__(self):
        super().__init__()
        self.init_window()

    def init_window(self):
        self.setFixedSize(800, 500)
        self.title = "PDF-Compressor is an Open Source Project by IT'S FOSS"
        self.top = 100
        self.left = 100
        self.width = 800
        self.height = 500

        self.setWindowIcon(QtGui.QIcon("its.png"))
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        self.button = QPushButton('Select File', self)
        self.button.clicked.connect(self.select_pdf)
        self.button.move(200, 250)

        self.button2 = QPushButton('Compress', self)
        self.button2.clicked.connect(lambda:self.compress(self.groupButton.checkedId()))
        self.button2.move(500, 250)
        self.button2.setEnabled(False)
        self.button2.setStyleSheet("background-color: #808080; ")

        self.radio1 = QRadioButton('Low Compression', self)
        self.radio1.move(330, 180)
        self.radio1.resize(200, 20)
        self.radio1.setChecked(True)

        self.radio2 = QRadioButton('Medium Compression', self)
        self.radio2.move(330, 210)
        self.radio2.resize(200, 20)

        self.radio3 = QRadioButton('High Compression', self)
        self.radio3.move(330, 240)
        self.radio3.resize(200, 20)

        self.groupButton = QButtonGroup()
        self.groupButton.addButton(self.radio1, 1)
        self.groupButton.addButton(self.radio2, 2)
        self.groupButton.addButton(self.radio3, 3)

        self.image = QLabel(self)
        self.image.setPixmap(QtGui.QPixmap("pdff.png"))
        self.image.resize(100, 100)
        self.image.move(230, 150)
        self.image.show()

        self.image2 = QLabel(self)
        self.image2.setPixmap(QtGui.QPixmap("inboxx.png"))
        self.image2.resize(100, 100)
        self.image2.move(525, 150)
        self.image2.show()

        self.image3 = QLabel(self)
        self.image3.setPixmap(QtGui.QPixmap("its.png"))
        self.image3.resize(50, 50)
        self.image3.move(180, 385)
        self.image3.show()

        self.label = QLabel(self)
        self.label.setText("PDF-Compressor is an Open Source Project by It's FOSS")
        self.label.move(250, 400)
        self.label.resize(400, 20)

        self.label1 = QLabel(self)
        self.label1.setText("")
        self.label1.setStyleSheet("color: green; ")
        self.label1.move(320, 350)
        self.label1.resize(400, 20)

        self.label2 = QLabel(self)
        self.label2.setText("")
        self.label2.setStyleSheet("color: red; ")
        self.label2.move(320, 350)
        self.label2.resize(400, 20)

        self.label3 = QLabel(self)
        self.label3.setText("")
        self.label3.setStyleSheet("color: green; ")
        self.label3.move(320, 350)
        self.label3.resize(400, 40)

        self.label4 = QLabel(self)
        self.label4.setText("")
        self.label4.setStyleSheet("color: red; ")
        self.label4.move(320, 350)
        self.label4.resize(400, 40)

        self.font = QFont("Arial", 8)
        self.font.setBold(True)

        self.show()

    def select_pdf(self):
        self.file = QFileDialog.getOpenFileName(self, "Select a Pdf File", "/home/", "Pdf Files (*.pdf)")[0]
        self.button.setText(os.path.basename(self.file))
        self.button.setFont(self.font)
        self.label1.setText("Your file is ready to be compressed.")
        self.button2.setStyleSheet("background-color: green ")
        self.button2.setEnabled(True)
        if self.button.text() == '':
            self.label2.setText("PDF file has not been selected")
            self.label1.setText("")
            self.label3.setText("")
            self.label4.setText("")
            self.button2.setStyleSheet("background-color: red ")
            self.button2.setEnabled(False)
            self.button.setText("Select File")
        try:
            if self.file != '':
                if(os.path.splitext(self.file) == "pdf"):
                    self.label2.setStyleSheet("color: green; ")
                    self.label1.setText("Your file is ready to be compressed.")
                    self.label2.setText("")
                    self.label3.setText("")
                    self.label4.setText("")
                    self.button2.setStyleSheet("background-color: green ")
                else:
                    self.label2.setText("")
                    self.label3.setText("")
                    self.label4.setText("")
        except AttributeError:
                self.label2.setText("PDF file has not been selected.")

    def compress(self, check):
        logger.info("Starting compress method")
        try:
            compress(self.file, check)
        except subprocess.CalledProcessError as e:
            self.error_dialog()
        else:
            # Subprocess should fail if an error occurred.
            # If we end up here we can pull up the success page
            self.success_dialog()

    def error_dialog(self):
        self.label4.setText("Something went wrong!")
        self.label1.setText("")
        self.label2.setText("")
        self.label3.setText("")

    def success_dialog(self):
        self.label3.setText("Your file has been compressed.\nIt coexists with your input file.")
        self.label1.setText("")
        self.label2.setText("")
        self.label4.setText("")
class Root(QMainWindow):
    def __init__(self):

        super().__init__()

        self.setStyleSheet("background-color: #e0e0eb;")
        self.setFixedSize(600, 400)
        self.title = "File Encrypter"
        self.top = 400
        self.left = 100
        self.width = 400
        self.height = 600
        self.InitWindow()

    def InitWindow(self):

        self.setWindowIcon(QtGui.QIcon("flamingo.png"))
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)

        self.button = QPushButton('Select File', self)
        self.button.clicked.connect(self.select_file)
        self.button.move(100, 200)
        self.button.resize(100, 40)

        self.button2 = QPushButton('Launch', self)
        self.button2.clicked.connect(
            lambda: self.Launch(self.radio1.isChecked()))
        self.button2.move(400, 200)
        self.button2.setEnabled(False)
        self.button2.setStyleSheet("background-color: #808080; ")
        self.button2.resize(100, 40)

        self.button3 = QPushButton('', self)
        self.button3.setIcon(QtGui.QIcon("gear.png"))
        self.button3.clicked.connect(self.Info)
        self.button3.move(550, 20)
        self.button3.resize(30, 30)

        self.radio1 = QRadioButton('Encrypt', self)
        self.radio1.move(270, 140)
        self.radio1.resize(200, 50)

        self.radio2 = QRadioButton('Decrypt', self)
        self.radio2.move(270, 190)
        self.radio2.resize(80, 40)

        self.image = QLabel(self)
        self.image.setPixmap(QtGui.QPixmap("file.png"))
        self.image.resize(150, 100)
        self.image.move(120, 100)
        self.image.show()

        self.image2 = QLabel(self)
        self.image2.setPixmap(QtGui.QPixmap("crypt.png"))
        self.image2.resize(150, 100)
        self.image2.move(420, 100)
        self.image2.show()

        self.image3 = QLabel(self)
        self.image3.setPixmap(QtGui.QPixmap("gnu.png"))
        self.image3.resize(150, 160)
        self.image3.move(280, 280)
        self.image3.show()

        self.label = QLabel(self)
        self.label.setText("Encyption with GNU Privacy Guard")
        self.label.move(330, 350)
        self.label.resize(400, 20)

        self.show()

    def select_file(self):
        self.file = QFileDialog.getOpenFileName(self, "Select a File",
                                                "/home/", "All Files (*.*)")[0]
        if (os.path.splitext(self.file) == "gpg"):
            self.radio2.setChecked(True)
        else:
            self.radio1.setChecked(True)
        self.button.setText(os.path.basename(self.file))
        if self.button.text() == '':
            self.button.setText("Select File")
            self.button2.setEnabled(False)
            self.button2.setStyleSheet("background-color: #808080; ")
        else:
            self.button2.setStyleSheet("background-color: red; ")
            self.button2.setEnabled(True)

    def Launch(self, check):
        if check:
            subprocess.call(['bash', 'check.sh', '-c', self.file])
        else:
            subprocess.call(['bash', 'check.sh', '-d', self.file])

    def Info(self):
        self.info = QMessageBox()
        self.top2 = 400
        self.left2 = 200
        self.width2 = 400
        self.height2 = 600
        self.info.setGeometry(self.top2, self.left2, self.width2, self.height2)
        self.info.setWindowTitle("Details")
        self.info.setText("\nThis tool is a free/open-source software \
that encrypts a user's file using GNU Privacy Guard. \
\n\n Version: 1.0 \n\n License: GPL v3.0")
        self.info.show()
Example #12
0
class MyWidget(QMainWindow):
    def __init__(self):

        # переменные, определяющие текущее положение карты
        # масштаб - self.z
        # lonlat - долгота, широта
        # тип карты - map
        self.lonlat = [0, 0]
        self.z = 12
        self.map_type = 'map'

        self.address = ''

        # метки на карте
        self.tag = ''

        # ответ Я.Карт
        self.response = None

        # Индекс
        self.index = 'Отс.'

        # Подставлять ли индекс
        self.is_index = False

        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(*SCREEN_SIZE)
        self.setMaximumSize(*SCREEN_SIZE)
        self.setMinimumSize(*SCREEN_SIZE)

        # ввод соординат
        self.coordinates_search = QLineEdit(self)
        self.coordinates_search.resize(165, 20)
        self.coordinates_search.move(625, 85)

        self.csearsh_label = QLabel(self)
        self.csearsh_label.setText(
            "• Поиск по \n(координатам/названию\nобъекта):")
        self.csearsh_label.move(625, 30)
        self.csearsh_label.resize(self.csearsh_label.sizeHint())

        # кнопка подтверждения ввода
        self.submit_csearch = QPushButton(self)
        self.submit_csearch.setText("SUBMIT")
        self.submit_csearch.move(625, 110)
        self.submit_csearch.resize(75, 30)
        self.submit_csearch.clicked.connect(self.csearch)

        # тип карты (схема/спутник/гибрид)
        self.skl_rbutton = QRadioButton(self)
        self.skl_rbutton.move(625, 150)
        self.skl_rbutton.setText('тип "Схема"')
        self.skl_rbutton.setChecked(True)
        self.skl_rbutton.resize(self.skl_rbutton.sizeHint())
        self.skl_rbutton.toggled.connect(self.map_type_changed)

        self.sat_rbutton = QRadioButton(self)
        self.sat_rbutton.move(625, 170)
        self.sat_rbutton.setText('тип "Спутник"')
        self.sat_rbutton.resize(self.sat_rbutton.sizeHint())
        self.sat_rbutton.toggled.connect(self.map_type_changed)

        self.hybrid_rbutton = QRadioButton(self)
        self.hybrid_rbutton.move(625, 190)
        self.hybrid_rbutton.setText('тип "Гибрид"')
        self.hybrid_rbutton.resize(self.hybrid_rbutton.sizeHint())
        self.hybrid_rbutton.toggled.connect(self.map_type_changed)

        self.verticalLayout = QVBoxLayout(self)
        self.verticalLayout.addWidget(self.skl_rbutton)
        self.verticalLayout.addWidget(self.sat_rbutton)
        self.verticalLayout.addWidget(self.hybrid_rbutton)

        # сброс меток поиска
        self.tags_clean = QPushButton(self)
        self.tags_clean.setText('Сброс')
        self.tags_clean.resize(self.tags_clean.sizeHint())
        self.tags_clean.move(625, 470)
        self.tags_clean.clicked.connect(self.tags_clean_function)

        # Поле вывода полного адреса объекта
        self.address_field = QPlainTextEdit(self)
        self.address_field.setReadOnly(True)
        self.address_field.setMaximumWidth(165)
        self.address_field.setMaximumHeight(205)
        self.address_field.resize(self.address_field.sizeHint())
        self.address_field.move(625, 265)
        self.address_label = QLabel(self)
        self.address_label.setText('Полный адрес объекта:')
        self.address_label.resize(self.address_label.sizeHint())
        self.address_label.move(625, 220)
        self.index_checkbox = QCheckBox(self)
        self.index_checkbox.setText('Вывод индекса')
        self.index_checkbox.resize(self.index_checkbox.sizeHint())
        self.index_checkbox.stateChanged.connect(self.revert_index_state)
        self.index_checkbox.move(625, 240)

        # карта
        self.main_map = QLabel(self)
        self.main_map.move(30, 30)
        self.main_map.resize(*MAP_SIZE)

        # QPixmap для карты
        self.main_pixmap = QPixmap()
        self.update_map()

    def do_address(self, address, index):
        return ', '.join(
            filter(bool,
                   [address,
                    (f'Индекс: {index}' if self.is_index else '')])) + '.'

    def revert_index_state(self):
        self.is_index = bool(1 - self.is_index)
        text = self.do_address(self.address, self.index)
        self.address_field.setPlainText(text)

    def update_map(self, lonlat=None, address='', index=None, tag=None):
        if lonlat is None:
            lonlat = self.lonlat[:]

        if not address:
            address = self.address

        if index is None:
            index = self.index

        if not tag:
            tag = self.tag

        data = return_map(*lonlat, self.z, self.map_type, tag, MAP_SIZE)
        if data is not None:
            self.main_pixmap.loadFromData(data)
            self.main_map.setPixmap(self.main_pixmap)
            self.address_field.setPlainText(
                self.do_address(self.address, self.index))
            return True
        return False
        # True - запрос выполнен, False - нет
        # Нужно для csearch (update lonlat or not)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_PageUp and self.z < 17:
            self.z += 1
            self.update_map()
        elif event.key() == Qt.Key_PageDown and self.z > 1:
            self.z -= 1
            self.update_map()

        # изменение долготы [-180; 180]
        elif event.key() in [Qt.Key_D, Qt.Key_A]:
            step = 360 / 2**(self.z - 1)
            # уменьшение или увеличение долготы
            k = 1 if event.key() == Qt.Key_D else -1

            # шаг
            self.lonlat[0] += k * step
            self.lonlat[0] = (self.lonlat[0] + 180) % 360 - 180
            self.update_map()

        # изменение широты [-90; 90]
        elif event.key() in [Qt.Key_W, Qt.Key_S]:
            step = 180 / 2**(self.z - 1)
            # уменьшение или увеличение широты
            k = 1 if event.key() == Qt.Key_W else -1

            # шаг
            self.lonlat[1] += k * step
            self.lonlat[1] = (self.lonlat[1] + 90) % 180 - 90
            self.update_map()

    def map_type_changed(self):
        if self.sat_rbutton.isChecked():
            self.map_type = "sat"
        elif self.skl_rbutton.isChecked():
            self.map_type = "map"
        elif self.hybrid_rbutton.isChecked():
            self.map_type = "sat,skl"
        self.update_map()

    def csearch(self):
        # поиск по координатам
        if all([i.isdecimal()
                for i in self.coordinates_search.text().split()]):
            lon, lat = map(float, self.coordinates_search.text().split())
        # поиск по топониму
        else:
            response = toponym_info(self.coordinates_search.text())
            # ничего не нашел
            if not response:
                return
            lon, lat = response['pos']
            address = response['address']
            index = response['index']
            tag = f'{lon},{lat}'

        if self.update_map(lonlat=[lon, lat],
                           address=address,
                           index=index,
                           tag=tag):
            self.lonlat = [lon, lat]
            self.address = address
            self.index = index
            self.tag = tag
            self.main_map.setFocus()

    def tags_clean_function(self):
        self.tag = ''
        self.address = ''
        self.index = 'Отс.'
        self.update_map()
Example #13
0
class VideoClip(QWidget):
    def __init__(self):
        super(VideoClip, self).__init__()
        self.switch = True
        self.initUI()

    def initUI(self):
        # 视频源文件夹路径
        self.source_btn = QPushButton('源文件夹:', self)
        self.source_btn.move(20, 30)
        self.source_btn.resize(100, 30)
        self.source_btn.clicked.connect(self.select_source)
        self.source_le = QLineEdit(
            '/Users/tangyong/test/automation/video-cut/original_videos', self)
        self.source_le.move(120, 30)
        self.source_le.resize(450, 30)

        # 处理后的视频存储路径
        self.save_btn = QPushButton('存储路径:', self)
        self.save_btn.move(20, 75)
        self.save_btn.resize(100, 30)
        self.save_btn.clicked.connect(self.select_save)
        self.save_le = QLineEdit(
            '/Users/tangyong/test/automation/video-cut/test', self)
        self.save_le.move(120, 75)
        self.save_le.resize(450, 30)

        # 背景颜色调色板
        self.scale_rate_btn = QPushButton('缩小比例:', self)
        self.scale_rate_btn.move(20, 120)
        self.scale_rate_btn.resize(100, 30)
        self.scale_rate_le = QLineEdit('0.99', self)
        self.scale_rate_le.move(120, 120)
        self.scale_rate_le.resize(60, 30)

        # 字体颜色调色板
        self.font_color_btn = QPushButton('字体颜色:', self)
        self.font_color_btn.move(225, 120)
        self.font_color_btn.resize(100, 30)
        self.font_color_btn.clicked.connect(self.showFontColorDialog)
        self.font_color_le = QLineEdit('#ffff00', self)
        self.font_color_le.move(325, 120)
        self.font_color_le.resize(60, 30)

        # 字体大小设置
        self.start_size_btn = QPushButton('字体大小:', self)
        self.start_size_btn.move(430, 120)
        self.start_size_btn.resize(100, 30)
        self.start_size_le = QLineEdit('30', self)
        self.start_size_le.move(530, 120)
        self.start_size_le.resize(40, 30)

        # 视频裁剪开始时间参数
        self.startLabel = QLabel(self)
        self.startLabel.move(30, 165)
        self.startLabel.resize(100, 30)
        self.startLabel.setText("掐头时间(s):")
        self.start_le = QLineEdit('1', self)
        self.start_le.move(120, 165)
        self.start_le.resize(150, 30)

        # 视频裁剪总时长参数
        self.durationLabel = QLabel(self)
        self.durationLabel.move(330, 165)
        self.durationLabel.resize(100, 30)
        self.durationLabel.setText("去尾时间(s):")
        self.duration_le = QLineEdit('1', self)
        self.duration_le.move(420, 165)
        self.duration_le.resize(150, 30)

        # 视频裁剪宽
        self.speedupLabel = QLabel(self)
        self.speedupLabel.move(30, 210)
        self.speedupLabel.resize(100, 30)
        self.speedupLabel.setText("视频加速:")
        self.speedup_le = QLineEdit('0.99', self)
        self.speedup_le.move(120, 210)
        self.speedup_le.resize(150, 30)

        # 视频裁剪高
        self.contrastLabel = QLabel(self)
        self.contrastLabel.move(330, 210)
        self.contrastLabel.resize(100, 30)
        self.contrastLabel.setText("对比度:")
        self.contrast_le = QLineEdit('1', self)
        self.contrast_le.move(420, 210)
        self.contrast_le.resize(150, 30)

        # 视频裁剪宽
        self.brightnessLabel = QLabel(self)
        self.brightnessLabel.move(30, 255)
        self.brightnessLabel.resize(100, 30)
        self.brightnessLabel.setText("亮度:")
        self.brightness_le = QLineEdit('0', self)
        self.brightness_le.move(120, 255)
        self.brightness_le.resize(150, 30)

        # 视频裁剪高
        self.saturationLabel = QLabel(self)
        self.saturationLabel.move(330, 255)
        self.saturationLabel.resize(100, 30)
        self.saturationLabel.setText("饱和度:")
        self.saturation_le = QLineEdit('1', self)
        self.saturation_le.move(420, 255)
        self.saturation_le.resize(150, 30)

        # 第一段文案
        self.text1Label = QLabel(self)
        self.text1Label.move(30, 300)
        self.text1Label.resize(100, 30)
        self.text1Label.setText("第一段文案:")
        self.text1_le = QLineEdit('', self)
        self.text1_le.move(120, 300)
        self.text1_le.resize(400, 30)
        self.text1height_le = QLineEdit('50', self)
        self.text1height_le.move(525, 300)
        self.text1height_le.resize(45, 30)

        # 第二段文案
        self.text2Label = QLabel(self)
        self.text2Label.move(30, 345)
        self.text2Label.resize(100, 30)
        self.text2Label.setText("第二段文案:")
        self.text2_le = QLineEdit('', self)
        self.text2_le.move(120, 345)
        self.text2_le.resize(400, 30)
        self.text2height_le = QLineEdit('100', self)
        self.text2height_le.move(525, 345)
        self.text2height_le.resize(45, 30)

        # 第三段文案是否镜像
        self.minorLabel = QLabel(self)
        self.minorLabel.move(30, 390)
        self.minorLabel.resize(100, 30)
        self.minorLabel.setText("是否镜像:")
        self.minor_le_yes = QRadioButton('是', self)
        self.minor_le_yes.move(120, 390)
        self.minor_le_yes.resize(50, 30)
        self.minor_le_yes.clicked.connect(
            lambda: self.radioBeClicked(self.sender().text()))
        self.minor_le_no = QRadioButton('否', self)
        self.minor_le_no.move(180, 390)
        self.minor_le_no.resize(50, 30)
        self.minor_le_no.clicked.connect(
            lambda: self.radioBeClicked(self.sender().text()))
        self.minor_le_no.setChecked(True)
        self.minor = False

        #开始剪辑按钮
        self.save_btn = QPushButton('开始剪辑视频', self)
        self.save_btn.move(450, 435)
        self.save_btn.resize(120, 50)
        self.save_btn.clicked.connect(self.kick)

        #用户提示区
        self.result_le = QLabel('请填写视频剪辑相关参数', self)
        self.result_le.move(30, 480)
        self.result_le.resize(340, 30)
        self.result_le.setStyleSheet('color: blue;')

        # 整体界面设置
        self.resize(600, 600)
        self.center()
        self.setWindowTitle('抖音视频自动化剪辑')  #设置界面标题名
        self.show()

    # 窗口居中函数
    def center(self):
        screen = QtWidgets.QDesktopWidget().screenGeometry()  #获取屏幕分辨率
        size = self.geometry()  #获取窗口尺寸
        self.move(int((screen.width() - size.width()) / 2),
                  int((screen.height() - size.height()) / 2))  #利用move函数窗口居中

    def radioBeClicked(self, btnText):
        self.minor = btnText == '是'
        return self.minor

    def select_source(self):
        dir_path = QFileDialog.getExistingDirectory(self, "请选择源文件夹路径", "C:/")
        self.source_le.setText(str(dir_path))

    def select_save(self):
        dir_path = QFileDialog.getExistingDirectory(self, "请选择处理后视频保存路径",
                                                    "C:/")
        self.save_le.setText(str(dir_path))

    def set_label_func(self, text):
        self.result_le.setText(text)

    def switch_func(self, bools):
        self.switch = bools

    def showFontColorDialog(self):
        col = QColorDialog.getColor()
        if col.isValid():
            self.font_color_le.setText(str(col.name()))

    def kick(self):
        sourcePath = self.source_le.text().strip()
        savePath = self.save_le.text().strip()
        scaleRate = self.scale_rate_le.text().strip()
        fontColor = self.font_color_le.text().strip()
        fontSize = int(self.start_size_le.text().strip())
        startTime = float(self.start_le.text().strip())
        durationTime = float(self.duration_le.text().strip())
        speedup = float(self.speedup_le.text().strip())
        contrast = float(self.contrast_le.text().strip())
        brightness = float(self.brightness_le.text().strip())
        saturation = float(self.saturation_le.text().strip())
        text1 = self.text1_le.text().strip()
        text1height = int(self.text1height_le.text().strip())
        text2 = self.text2_le.text().strip()
        text2height = int(self.text2height_le.text().strip())
        minor = self.minor
        if self.switch and sourcePath != '' and savePath != '' and scaleRate != '' and fontSize != '' and startTime != '' and durationTime != '' and speedup != '' and contrast != '' and brightness != '' and saturation != '' and minor != '':
            self.switch = False
            self.set_label_func('请耐心等待,正在打开浏览器!')
            self.my_thread = MyThread(sourcePath, savePath, scaleRate,
                                      fontColor, fontSize, startTime,
                                      durationTime, speedup, contrast,
                                      brightness, saturation, text1,
                                      text1height, text2, text2height, minor,
                                      self.set_label_func)  #实例化线程对象
            self.my_thread.start()  #启动线程
            self.my_thread.my_signal.connect(self.switch_func)