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')
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()
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()
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)
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()
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')
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)
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)
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()
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()
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)