class SliceWidget(QWidget): """Custom widget to slice data""" # Signals sliceTimes = pyqtSignal(str, str) def __init__(self): super().__init__() self.initUI() def initUI(self): # Labels sliceLabel = QLabel("Slicing") startLabel = QLabel("Start: ") endLabel = QLabel("End: ") # DateTimeEdit self.startDateTimeEdit = QDateTimeEdit() self.endDateTimeEdit = QDateTimeEdit() # Buttons applyButton = QPushButton("Apply") applyButton.clicked.connect(self.sendTimes) hideButton = QPushButton("Hide") hideButton.clicked.connect(self.hide) # Layouts # - Horizontal for start hStart = QHBoxLayout() hStart.addWidget(startLabel) hStart.addWidget(self.startDateTimeEdit) # - Horizontal for end hEnd = QHBoxLayout() hEnd.addWidget(endLabel) hEnd.addWidget(self.endDateTimeEdit) # - Vertical for self vWidget = QVBoxLayout() vWidget.addWidget(sliceLabel) vWidget.addLayout(hStart) vWidget.addLayout(hEnd) vWidget.addWidget(applyButton) vWidget.addWidget(hideButton) self.setLayout(vWidget) def sendTimes(self): self.sliceTimes.emit(self.startDateTimeEdit.text(), self.endDateTimeEdit.text()) def refresh(self, start, end): self.startDateTimeEdit.setMinimumDateTime(start) self.startDateTimeEdit.setMaximumDateTime(end) self.startDateTimeEdit.setDateTime(start) self.endDateTimeEdit.setMinimumDateTime(start) self.endDateTimeEdit.setMaximumDateTime(end) self.endDateTimeEdit.setDateTime(end)
class Window(QWidget): def __init__(self): super().__init__() # Make widgets ################# self.edit1 = QDateTimeEdit() self.edit2 = QDateTimeEdit() self.edit3 = QDateTimeEdit() self.edit1.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit2.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit3.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit1.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit2.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit3.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit1.setDateTime(datetime.datetime.now()) self.edit2.setDateTime(datetime.datetime.now()) self.edit3.setDateTime(datetime.datetime.now()) #self.edit1.setCalendarPopup(True) #self.edit2.setCalendarPopup(True) #self.edit3.setCalendarPopup(True) # Format: see http://doc.qt.io/qt-5/qdatetime.html#toString-2 self.edit1.setDisplayFormat("yyyy-MM-dd HH:mm") self.edit2.setDisplayFormat("dd/MM/yyyy HH:mm:ss t") self.edit3.setDisplayFormat("dddd d MMMM yyyy h m AP") self.btn = QPushButton("Print") # Set button slot ############## self.btn.clicked.connect(self.printText) # Set the layout ############### vbox = QVBoxLayout() vbox.addWidget(self.edit1) vbox.addWidget(self.edit2) vbox.addWidget(self.edit3) vbox.addWidget(self.btn) self.setLayout(vbox) def printText(self): print(self.edit1.text()) print(self.edit2.text()) print(self.edit3.text())
class Window(QWidget): def __init__(self): super().__init__() # Make widgets ################# self.edit1 = QDateTimeEdit() self.edit2 = QDateTimeEdit() self.edit3 = QDateTimeEdit() self.edit1.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit2.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit3.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit1.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit2.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit3.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit1.setDateTime(datetime.datetime.now()) self.edit2.setDateTime(datetime.datetime.now()) self.edit3.setDateTime(datetime.datetime.now()) self.edit1.setCalendarPopup(True) self.edit2.setCalendarPopup(True) self.edit3.setCalendarPopup(True) # Format: see http://doc.qt.io/qt-5/qdatetime.html#toString-2 self.edit1.setDisplayFormat("yyyy-MM-dd HH:mm") self.edit2.setDisplayFormat("dd/MM/yyyy HH:mm:ss t") self.edit3.setDisplayFormat("dddd d MMMM yyyy h m AP") self.btn = QPushButton("Print") # Set button slot ############## self.btn.clicked.connect(self.printText) # Set the layout ############### vbox = QVBoxLayout() vbox.addWidget(self.edit1) vbox.addWidget(self.edit2) vbox.addWidget(self.edit3) vbox.addWidget(self.btn) self.setLayout(vbox) def printText(self): print(self.edit1.text()) print(self.edit2.text()) print(self.edit3.text())
class Dialog(QDialog): #自定义消息 dialogSignel = pyqtSignal(int, str) def __init__(self, parent=None): super(Dialog, self).__init__(parent) layout = QVBoxLayout(self) self.label = QLabel(self) self.datetime = QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) self.label.setText("请选择日期") layout.addWidget(self.label) layout.addWidget(self.datetime) buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) buttons.accepted.connect(self.accept) #点击ok buttons.rejected.connect(self.reject) #点击cancel layout.addWidget(buttons) def accept(self): #点击ok是发送内置信号 print("accept") self.dialogSignel.emit(0, self.datetime.text()) self.destroy() def reject(self): #点击cancel时,发送自定义信号 print('reject') self.dialogSignel.emit(1, "清空") self.destroy()
class MailserverUi(QMainWindow): def __init__(self): super().__init__() setConfigOption('background', '#19232D') setConfigOption('foreground', 'd') setConfigOptions(antialias = True) # self.resize(720,500) self.init_ui() self.data_smtp = [] self.data_db = [] self.data_logs = [] self.data_temp_logs = [] # self.sub_win = SubWindow() # 默認狀態欄 self.status = self.statusBar() self.status.showMessage("開發者: 鄭鈺城, 聯絡資訊: [email protected]") # 標題欄 self.setWindowTitle("社交郵件工程") self.setWindowOpacity(1) # 窗口透明度 self.main_layout.setSpacing(0) self.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) self.main_widget.setStyleSheet( """ QComboBox::item:checked { height: 12px; border: 1px solid #32414B; margin-top: 0px; margin-bottom: 0px; padding: 4px; padding-left: 0px; } """ ) def init_ui(self): # 創建視窗主部件 self.main_widget = QWidget() # 創建主部件的網格佈局 self.main_layout = QGridLayout() # 設置窗口主部件佈局為網格佈局 self.main_widget.setLayout(self.main_layout) # 創建左側部件 self.left_widget = QWidget() self.left_widget.setObjectName('left_widget') self.left_layout = QGridLayout() self.left_widget.setLayout(self.left_layout) # 創建右側部件 self.right_widget = QWidget() self.right_widget.setObjectName('right_widget') self.right_layout = QGridLayout() self.right_widget.setLayout(self.right_layout) # 左側部件在第0行第0列,佔12行3列 self.main_layout.addWidget(self.left_widget, 0, 0, 12, 3) # 右側部件在第0行第3列,佔12行8列 self.main_layout.addWidget(self.right_widget, 0, 3, 12, 8) # 設置視窗主部件 self.setCentralWidget(self.main_widget) # 主要功能按鈕 self.btn_sendmail = QPushButton("發送信件") self.btn_sendmail.clicked.connect(self.display_send_mail) self.btn_smtp = QPushButton("系統設定") self.btn_smtp.clicked.connect(self.display_smtp_setting) self.btn_db = QPushButton("資料庫設定") self.btn_db.clicked.connect(self.display_db_setting) self.btn_update_eml = QPushButton("修改樣板") self.btn_update_eml.clicked.connect(self.display_update_eml) self.btn_get_logs = QPushButton("觸發明細") self.btn_get_logs.clicked.connect(self.display_logs) self.btn_download_logs = QPushButton("下載觸發明細") self.btn_download_logs.clicked.connect(self.logs_download) self.quit_btn = QPushButton("退出") self.quit_btn.clicked.connect(self.quit_act) self.left_layout.addWidget(self.btn_sendmail, 2, 0, 1, 3) self.left_layout.addWidget(self.btn_smtp, 3, 0, 1, 3) self.left_layout.addWidget(self.btn_db, 4, 0, 1, 3) self.left_layout.addWidget(self.btn_update_eml, 5, 0, 1, 3) self.left_layout.addWidget(self.btn_get_logs, 6, 0, 1, 3) self.left_layout.addWidget(self.btn_download_logs, 7, 0, 1, 3) self.left_layout.addWidget(self.quit_btn, 8, 0, 1, 3) # 主要功能查詢 self.in_data = QLineEdit() self.in_data.setPlaceholderText("暫無") self.left_layout.addWidget(self.in_data, 1, 0, 1, 3) # 主要功能 log self.query_result = QTableWidget() self.left_layout.addWidget(self.query_result, 9, 0, 2, 3) self.query_result.verticalHeader().setVisible(False) self.right_display = GraphicsLayoutWidget() self.right_layout.addWidget(self.right_display, 0, 3, 12, 8) # 右側物件: sendmail self.in_eml_type = QLineEdit() self.in_eml_template = QLineEdit() self.btn_eml_browse = QPushButton('瀏覽') self.btn_eml_browse.clicked.connect(lambda: self.open_eml(self.in_eml_template)) self.in_recipient_group = QLineEdit() self.in_recipient_excel = QLineEdit() self.btn_recipient_browse = QPushButton('瀏覽') self.btn_recipient_browse.clicked.connect(lambda: self.open_excel(self.in_recipient_excel)) self.in_annex_file = QLineEdit() self.btn_annex_file = QPushButton('瀏覽') self.btn_annex_file.clicked.connect(lambda: self.open_word(self.in_annex_file)) self.in_scheduler = QDateTimeEdit(QDateTime.currentDateTime()) self.in_scheduler.setCalendarPopup(True) self.in_scheduler.setDisplayFormat('yyyy-MM-dd hh:mm') self.cb_scheduler = QCheckBox('使用') self.btn_sendmail_start = QPushButton('執行') self.btn_sendmail_start.clicked.connect(self.send_mail) # 右側物件: smtp self.in_smtp_host = QLineEdit() self.in_smtp_port = QLineEdit() self.in_smtp_user = QLineEdit() self.in_smtp_password = QLineEdit() self.cb_smtp_ssl = QCheckBox('使用') self.in_smtp_test = QLineEdit() self.btn_smtp_save = QPushButton('儲存') self.btn_smtp_save.clicked.connect(lambda: self.save_data(self.data_smtp)) self.btn_smtp_test = QPushButton('測試') self.btn_smtp_test.clicked.connect(self.show_sub_win) # 右側物件: db self.in_db_host = QLineEdit() self.in_db_port = QLineEdit() self.in_db_user = QLineEdit() self.in_db_password = QLineEdit() self.in_db_database = QLineEdit() self.in_db_domain = QLineEdit() self.in_db_domain.setPlaceholderText('回收風險資訊動作的網址') self.btn_db_save = QPushButton('儲存') self.btn_db_save.clicked.connect(lambda: self.save_data(self.data_db)) # 右側物件: update eml self.in_edit_sender = QLineEdit() self.in_edit_sender_name = QLineEdit() self.cb_edit_annex = QCheckBox('是') self.in_edit_annex = QLineEdit() self.btn_edit_annex = QPushButton('瀏覽') self.btn_edit_annex.clicked.connect(lambda: self.open_annex(self.in_edit_annex)) self.in_edit_subject = QLineEdit() self.mail_tab = QTabWidget() self.mail_tab.setDocumentMode(True) self.mail_tab.currentChanged.connect(self.print_html) self.mail_tab_1 = QWidget() self.mail_tab_2 = QWidget() self.mail_tab.addTab(self.mail_tab_1, 'Html') self.mail_tab.addTab(self.mail_tab_2, 'Web') self.tab_1 = QGridLayout() self.tab_2 = QGridLayout() self.tab_1.setContentsMargins(0,0,0,0) self.tab_2.setContentsMargins(0,0,0,0) self.mail_tab_1.setLayout(self.tab_1) self.mail_tab_2.setLayout(self.tab_2) self.in_edit_html = QTextEdit() self.in_edit_web = QWebEngineView() self.tab_1.addWidget(self.in_edit_html, 1, 1, 1, 1) self.tab_2.addWidget(self.in_edit_web, 1, 1, 1, 1) self.btn_edit_eml_reset = QPushButton('清除') self.btn_edit_eml_reset.clicked.connect(self.eml_reset) self.btn_edit_eml_read = QPushButton('讀取') self.btn_edit_eml_read.clicked.connect(self.eml_open) self.btn_edit_eml_save = QPushButton('儲存') self.btn_edit_eml_save.clicked.connect(self.eml_save) # 右側物件: logs self.tbw_logs = QTableWidget() self.tbw_logs.verticalHeader().setVisible(False) self.cmb_logs_choice = QComboBox() self.in_logs_data = QLineEdit() self.in_logs_data.setPlaceholderText("輸入資料") self.btn_logs_search = QPushButton('執行') self.btn_logs_search.clicked.connect(self.logs_change) def display_send_mail(self): self.clear_layout(self.right_layout) labels = [ "信件類型 :", "信件模板 :", " 收件人群組 :", "收件人資料 :", '附件資料 :',"設定排程 :"] for i, label in enumerate(labels): self.right_layout.addWidget(QLabel(label), i, 3, 1, 1, Qt.AlignRight) self.right_layout.addWidget(self.in_eml_type, 0, 4, 1, 7) self.right_layout.addWidget(self.in_eml_template, 1, 4, 1, 6) self.right_layout.addWidget(self.btn_eml_browse, 1, 10, 1, 1) self.right_layout.addWidget(self.in_recipient_group, 2, 4, 1, 7) self.right_layout.addWidget(self.in_recipient_excel, 3, 4, 1, 6) self.right_layout.addWidget(self.btn_recipient_browse, 3, 10, 1, 1) self.right_layout.addWidget(self.in_annex_file , 4, 4, 1, 6) self.right_layout.addWidget(self.btn_annex_file, 4, 10, 1, 1) self.right_layout.addWidget(self.in_scheduler, 5, 4, 1, 6) self.right_layout.addWidget(self.cb_scheduler, 5, 10, 1, 1) self.right_layout.addWidget(self.btn_sendmail_start, 6, 9, 1, 2) def display_smtp_setting(self): self.clear_layout(self.right_layout) # 在右邊新增物件 labels = ["SMTP HOST :", "SMTP PORT :", "SMTP 帳號 :", "SMTP 密碼 :", "SMTP SSL :", " 測試信件內容 :"] for i, label in enumerate(labels): self.right_layout.addWidget(QLabel(label), i, 3, 1, 1, Qt.AlignRight) self.right_layout.addWidget(self.in_smtp_host, 0, 4, 1, 7) self.right_layout.addWidget(self.in_smtp_port, 1, 4, 1, 7) self.right_layout.addWidget(self.in_smtp_user, 2, 4, 1, 7) self.right_layout.addWidget(self.in_smtp_password, 3, 4, 1, 7) self.right_layout.addWidget(self.cb_smtp_ssl, 4, 4, 1, 7) self.right_layout.addWidget(self.in_smtp_test, 5, 4, 1, 7) self.right_layout.addWidget(self.btn_smtp_save, 6, 9, 1, 2) self.right_layout.addWidget(self.btn_smtp_test, 6, 7, 1, 2) def display_db_setting(self): self.clear_layout(self.right_layout) # 在右邊新增物件 labels = ["資料庫 HOST :", "資料庫 PORT :", "資料庫 帳號 :", "資料庫 密碼 :", "使用資料庫名稱 :", "回收網址 :"] for i, label in enumerate(labels): self.right_layout.addWidget(QLabel(label), i, 3, 1, 1, Qt.AlignRight) self.right_layout.addWidget(self.in_db_host, 0, 4, 1, 7) self.right_layout.addWidget(self.in_db_port, 1, 4, 1, 7) self.right_layout.addWidget(self.in_db_user, 2, 4, 1, 7) self.right_layout.addWidget(self.in_db_password, 3, 4, 1, 7) self.right_layout.addWidget(self.in_db_database, 4, 4, 1, 7) self.right_layout.addWidget(self.in_db_domain, 5, 4, 1, 7) self.right_layout.addWidget(self.btn_db_save, 6, 9, 1, 2) def display_update_eml(self): self.clear_layout(self.right_layout) labels = ["寄件人 :", "寄件人名稱 :", " 是否加入附件 :", "附件名稱 :", "主旨 :", "內容 :"] for i, label in enumerate(labels): self.label = QLabel(label) self.right_layout.addWidget(self.label, i, 3, 1, 1, Qt.AlignRight) self.right_layout.addWidget(self.in_edit_sender, 0, 4, 1, 7) self.right_layout.addWidget(self.in_edit_sender_name, 1, 4, 1, 7) self.right_layout.addWidget(self.cb_edit_annex, 2, 4, 1, 7) self.right_layout.addWidget(self.in_edit_annex, 3, 4, 1, 6) self.right_layout.addWidget(self.btn_edit_annex, 3, 10, 1, 1) self.right_layout.addWidget(self.in_edit_subject, 4, 4, 1, 7) self.right_layout.addWidget(self.mail_tab, 5, 4, 6, 7) self.right_layout.addWidget(self.btn_edit_eml_reset, 11, 5, 1, 2) self.right_layout.addWidget(self.btn_edit_eml_read, 11, 7, 1, 2) self.right_layout.addWidget(self.btn_edit_eml_save, 11, 9, 1, 2) def display_logs(self): self.data_temp_logs = [] self.tbw_logs.setRowCount(0) self.clear_layout(self.right_layout) self.right_layout.addWidget(self.tbw_logs, 1, 3, 11, 8) self.right_layout.addWidget(QLabel('查詢 :'), 0, 3, 1, 1) self.right_layout.addWidget(self.cmb_logs_choice, 0, 4, 1, 2) self.right_layout.addWidget(self.in_logs_data, 0, 6, 1, 3) self.right_layout.addWidget(self.btn_logs_search, 0, 9, 1, 2) try: db = Database(self.data_db[0], int(self.data_db[1]), self.data_db[2], self.data_db[3], self.data_db[4]) if self.data_db[:5] else Database() self.data_logs = db.get_logs() self.data_temp_logs = deepcopy(self.data_logs) if self.data_logs: row_num = len(self.data_logs) col_num = len(self.data_logs[0]) col_lst = list(self.data_logs[0].keys()) self.cmb_logs_choice.clear() self.cmb_logs_choice.addItems(col_lst) self.tbw_logs.setRowCount(row_num) self.tbw_logs.setColumnCount(col_num) self.tbw_logs.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) self.tbw_logs.setHorizontalHeaderLabels(col_lst) for i in range(row_num): row_data = list(self.data_logs[i].values()) for j in range(col_num): temp_data = row_data[j] item = QTableWidgetItem(str(temp_data)) item.setForeground(QBrush(QColor(144, 182, 240))) self.tbw_logs.setItem(i, j, item) except: QMessageBox.warning(self, 'Failed!', '資料庫連結失敗!', QMessageBox.Ok) else: db.__disconnect__() def get_items_from_layout(self, layout): return [layout.itemAt(i).widget() for i in range(layout.count())] def save_data(self, data): items = self.get_items_from_layout(self.right_layout) data.clear() try: for item in items: if type(item) == type(QLineEdit()): data.append(item.text()) elif type(item) == type(QCheckBox()): data.append(item.isChecked()) QMessageBox.information(self, 'Success!', '儲存成功!', QMessageBox.Ok) except: QMessageBox.warning(self, 'Failed!', '儲存失敗!', QMessageBox.Ok) print(data) def clear_layout(self, layout): for i in reversed(range(layout.count())): layout.itemAt(i).widget().setParent(None) def open_eml(self, obj): file_name, _ = QFileDialog.getOpenFileName(self, "選取檔案", "./", "Eml Files (*.eml)") obj.setText(file_name) def open_excel(self, obj): file_name, _ = QFileDialog.getOpenFileName(self, "選取檔案", "./", "Excel Files (*.xlsx)") obj.setText(file_name) def open_word(self, obj): file_name, _ = QFileDialog.getOpenFileName(self, "選取檔案", "./", "Word Files (*.doc *.docx)") obj.setText(file_name) def open_annex(self, obj): file_name, _ = QFileDialog.getOpenFileName(self, "選取檔案", "./", "Annex Files (*.jpg *.png *.zip)") org_files = obj.text() all_files = org_files + ',' + file_name if org_files else file_name obj.setText(all_files) def print_html(self, index): if index: self.in_edit_web.setHtml(self.in_edit_html.toPlainText()) def send_mail(self): eml_type = self.in_eml_type.text() eml_file = self.in_eml_template.text() user_group = self.in_recipient_group.text() mail_excel = self.in_recipient_excel.text() annex_file = self.in_annex_file.text() url = self.data_db[5] if self.data_db else 'http://yumail.myvnc.com' try: if self.cb_scheduler.isChecked(): my_time = self.in_scheduler.text()+':00' client = Client() client.send(self.data_smtp[:4], self.data_db[:5], eml_type, eml_file, user_group, mail_excel, annex_file, url, my_time) QMessageBox.information(self, 'Success!', '排程設定成功!', QMessageBox.Ok) else: sm = Smtp(self.data_smtp[0], int(self.data_smtp[1]), self.data_smtp[2], self.data_smtp[3]) if self.data_smtp else Smtp() db = Database(self.data_db[0], int(self.data_db[1]), self.data_db[2], self.data_db[3], self.data_db[4]) if self.data_db else Database() insert_send_mail(eml_type, eml_file, user_group, mail_excel, sm, db, annex=annex_file, url=url) sm.close() db.__disconnect__() QMessageBox.information(self, 'Success!', '信件寄出成功!', QMessageBox.Ok) except: QMessageBox.warning(self, 'Failed!', '信件寄出失敗!', QMessageBox.Ok) def show_sub_win(self): if self.data_smtp: self.sub_win = SubWindow() self.sub_win.btn_send.clicked.connect(self.send_test) self.sub_win.show() else: QMessageBox.warning(self, 'Failed!', '請確認有無 SMTP 資料!', QMessageBox.Ok) def send_test(self): try: if self.data_smtp: mailserver = Smtp(self.data_smtp[0], int(self.data_smtp[1]), self.data_smtp[2], self.data_smtp[3]) mail_msg = gm.gen_test_eml(['Test Email', '測試寄件人', self.data_smtp[2], self.sub_win.in_recipient.text()], self.data_smtp[5]) error = mailserver.send(mail_msg.as_string(), self.data_smtp[2], self.sub_win.in_recipient.text()) mailserver.close() if error: QMessageBox.warning(self, 'Warning!', '信件寄出成功!\nWaning: '+error, QMessageBox.Ok) else: QMessageBox.information(self, 'Success!', '信件寄出成功!', QMessageBox.Ok) self.sub_win.in_recipient.clear() except: QMessageBox.warning(self, 'Failed!', '信件寄出失敗!', QMessageBox.Ok) def eml_open(self): self.in_edit_html.clear() file_name, _ = QFileDialog.getOpenFileName(self, "選取檔案", "./", "Eml Files (*.eml)") if not file_name: return header, html = gm.get_msg(file_name) self.in_edit_sender.setText(header[2]) self.in_edit_sender_name.setText(header[1]) self.in_edit_subject.setText(header[0]) self.in_edit_html.insertPlainText(html) def eml_save(self): header, msg = [], '' header.append(self.in_edit_subject.text()) header.append(self.in_edit_sender_name.text()) header.append(self.in_edit_sender.text()) header.append('*****@*****.**') annex_file = self.in_edit_annex.text().split(',') html = self.in_edit_html.toPlainText() if not any(header[:3]) or not html: return try: msg = gm.gen_eml(header, html, annex_file) if self.cb_edit_annex.isChecked() else gm.gen_eml(header, html) file_path, _ = QFileDialog.getSaveFileName(self, '另存為...', './', 'Excel Files (*.eml)') with open(file_path, 'w') as outfile: gen = generator.Generator(outfile) gen.flatten(msg) QMessageBox.information(self, 'Success!', '儲存成功!', QMessageBox.Ok) except: QMessageBox.warning(self, 'Failed!', '儲存失敗!', QMessageBox.Ok) def eml_reset(self): items = self.get_items_from_layout(self.right_layout) for item in items: if type(item) == type(QLineEdit()): item.clear() self.cb_edit_annex.setChecked(False) self.in_edit_html.clear() def logs_change(self): if not self.data_logs or not self.in_logs_data.text(): return self.data_temp_logs = [] self.tbw_logs.setRowCount(0) # header = {'郵件類型':'type', '郵件主旨':'subject', '使用者群組':'user_group', '使用者信箱':'user_email'} condition = self.cmb_logs_choice.currentText() content = self.in_logs_data.text() row_num = len(self.data_logs) col_num = len(self.data_logs[0]) # self.tbw_logs.setRowCount(row_num) self.tbw_logs.setColumnCount(col_num) for i in range(row_num): switch = False if condition == 'date' and content in str(self.data_logs[i][condition]): switch = True elif self.data_logs[i][condition] == content: switch = True if switch: self.tbw_logs.insertRow(self.tbw_logs.rowCount()) row_data = list(self.data_logs[i].values()) self.data_temp_logs.append(self.data_logs[i]) for j in range(col_num): temp_data = row_data[j] item = QTableWidgetItem(str(temp_data)) item.setForeground(QBrush(QColor(144, 182, 240))) self.tbw_logs.setItem(self.tbw_logs.rowCount()-1, j, item) def logs_download(self): if self.data_temp_logs: try: file_path, _ = QFileDialog.getSaveFileName(self, '另存為...', './', 'Excel Files (*.xlsx)') if not file_path: return df = DataFrame(self.data_temp_logs) df.to_excel(file_path, index=False) QMessageBox.information(self, 'Success!', '儲存成功!', QMessageBox.Ok) except: QMessageBox.warning(self, 'Failed!', '儲存失敗!', QMessageBox.Ok) else: QMessageBox.warning(self, "缺少資料", "請確認是否有資料可以下載", QMessageBox.Ok) def quit_act(self): # sender 是发送信号的对象 sender = self.sender() print(sender.text() + '键被按下') qApp = QApplication.instance() qApp.quit()
class Ui_Dialog(QWidget): windowList = [] def setupUi(self, Dialog): Dialog.setObjectName("Dialog") # Dialog.resize(1000, 950) Dialog.setGeometry(400, 50, 1000, 950) # Dialog.setDisabled(False) Dialog.setWindowOpacity(0.95) # 设置窗口透明度 # Dialog.setWindowFlag(QtCore.Qt.FramelessWindowHint) # 隐藏边框 # Dialog.setDisabled(True) # Dialog.WindowMinimizeButtonHint() Dialog.setStyleSheet( "#Dialog{background:red;border-top:1px solid white;border-bottom:1px solid white;border-left:1px solid white;border-top-left-radius:10px;border-bottom-left-radius:10px;}" ) # Dialog.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 设置窗口背景透明 self.cwd = os.getcwd() self.center() self.tabWidget = QtWidgets.QTabWidget(Dialog) self.tabWidget.setGeometry(QtCore.QRect(0, 0, 1000, 950)) self.tabWidget.setObjectName("tabWidget") # QTableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) ################################################## # c创建一个tabwidget(上方工具栏) # # # ################################################## self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab1") self.tabWidget.setCurrentIndex(1) # self.tabWidget.showNormal() self.tab3 = QtWidgets.QWidget() self.tab3.setObjectName("tab3") # self.tab3.setLayout(self.tabWidget) self.tab4 = QtWidgets.QWidget() self.tab4.setObjectName("tab4") self.tab5 = QtWidgets.QWidget() self.tab5.setObjectName("tab5") self.tabWidget.addTab(self.tab, "") self.tabWidget.addTab(self.tab3, "") self.tabWidget.addTab(self.tab4, "") self.tabWidget.addTab(self.tab5, "") self.tabWidget.setDocumentMode(True) self.setAcceptDrops(True) ################################################## # 创建一个弹出框全局变量 # # # ################################################## self.msgBox = QMessageBox() # 创建弹出框 self.mongo = QtWidgets.QPushButton(self.tab) self.mongo.setGeometry(QtCore.QRect(10, 40, 130, 40)) self.mongo.setObjectName("pushButton_mongo") self.jupy = QtWidgets.QPushButton(self.tab) self.jupy.setGeometry(QtCore.QRect(160, 40, 130, 42)) self.jupy.setObjectName("pushButton_2") self.lineEdit_2 = QtWidgets.QLineEdit(self.tab) self.lineEdit_2.setGeometry(QtCore.QRect(10, 270, 451, 41)) self.lineEdit_2.setObjectName("lineEdit_2") self.lineEdit_2.setStyleSheet('color:#BA55D3') self.lineEdit_3 = QtWidgets.QLineEdit(self.tab) self.lineEdit_3.setGeometry(QtCore.QRect(10, 220, 451, 41)) self.lineEdit_3.setObjectName("lineEdit_3") self.base_str = QtWidgets.QPushButton(self.tab) self.base_str.setGeometry(QtCore.QRect(510, 220, 131, 41)) self.base_str.setObjectName("pushButton_4") self.str_base = QtWidgets.QPushButton(self.tab) self.str_base.setGeometry(QtCore.QRect(510, 270, 131, 41)) self.str_base.setObjectName("pushButton_5") self.textBrowser = QtWidgets.QTextBrowser(self.tab) self.textBrowser.setGeometry(QtCore.QRect(700, 0, 256, 192)) self.textBrowser.setObjectName("textBrowser") # ip栏 self.textBrowser_2 = QtWidgets.QTextBrowser(self.tab) self.textBrowser_2.setGeometry(QtCore.QRect(15, 80, 130, 200)) self.textBrowser_2.setObjectName("textBrowser_2") # 温度 self.textBrowser_4 = QtWidgets.QTextBrowser(self.tab) self.textBrowser_4.setGeometry(QtCore.QRect(110, 110, 630, 111)) self.textBrowser_4.setObjectName("textBrowser_4") # 符号 self.textBrowser_6 = QtWidgets.QTextBrowser(self.tab) self.textBrowser_6.setGeometry(QtCore.QRect(70, 160, 700, 50)) self.textBrowser_6.setObjectName("textBrowser_6") # 风向 ################################################## # 作者按钮init # # # ################################################## self.auth = QtWidgets.QPushButton(self.tab) self.auth.setGeometry(QtCore.QRect(600, 120, 150, 40)) self.auth.setObjectName("auth") # 作者蓝 ################################################## # 计时器lableui # # # ################################################## self.texttime = QtWidgets.QLCDNumber(self.tab) self.texttime.setGeometry(QtCore.QRect(240, 40, 500, 30)) self.texttime.setMouseTracking(False) self.texttime.setDigitCount(19) self.texttime.setMode(QLCDNumber.Dec) self.texttime.setSegmentStyle(QLCDNumber.Flat) self.texttime.setObjectName("texttime") self.wx = QtWidgets.QLabel(self.tab) self.wx.setGeometry(QtCore.QRect(780, 90, 150, 150)) ################################################## # 作者按钮ui # # # ################################################## jpg = QPixmap('01-5.jpg').scaled(self.wx.width(), self.wx.height()) self.wx.setPixmap(jpg) self.wx.setStyleSheet( 'background:transparent;border-width:0;border-style:outset;') ################################################## # 文本对比按钮ui # # # ################################################## self.cmptext1 = QtWidgets.QTextEdit(self.tab) self.cmptext1.setGeometry(QtCore.QRect(20, 350, 411, 511)) self.cmptext1.setObjectName("cmptext1") self.cmptext2 = QtWidgets.QTextEdit(self.tab) self.cmptext2.setGeometry(QtCore.QRect(540, 350, 411, 511)) self.cmptext2.setObjectName("cmptext2") self.cmps = QtWidgets.QPushButton(self.tab) self.cmps.setGeometry(QtCore.QRect(440, 600, 93, 28)) self.cmps.setObjectName("cmps") ################################################## # tab3ui # # # ################################################## self.btn_chooseMutiFile = QtWidgets.QPushButton(self.tab3) self.btn_chooseMutiFile.setObjectName("btn_chooseMutiFile") self.btn_chooseMutiFile.setText("pdf-->txt") self.btn_chooseMutiFile.setGeometry(QtCore.QRect(400, 40, 200, 40)) self.textbrower3 = QtWidgets.QTextBrowser(self.tab3) self.textbrower3.setGeometry(QtCore.QRect(15, 80, 960, 800)) self.textbrower3.setObjectName("textbrower3") ################################################## # tab4ui配置 # # # ################################################## self.btn_chooseMutiFile_tab4 = QtWidgets.QPushButton(self.tab4) self.btn_chooseMutiFile_tab4.setObjectName("btn_chooseMutiFile_tab4") self.btn_chooseMutiFile_tab4.setText("pdf-->word") self.btn_chooseMutiFile_tab4.setGeometry(QtCore.QRect(50, 70, 200, 40)) self.tab4_brower4 = QtWidgets.QTextBrowser(self.tab4) self.tab4_brower4.setGeometry(QtCore.QRect(300, 30, 500, 120)) self.tab4_brower4.setObjectName("tab4_brower4") self.img_py = QtWidgets.QPushButton(self.tab4) self.img_py.setObjectName("img_py") self.img_py.setText("img-->py") self.img_py.setGeometry(QtCore.QRect(50, 360, 200, 40)) self.tab4_brower_img = QtWidgets.QTextBrowser(self.tab4) self.tab4_brower_img.setGeometry(QtCore.QRect(300, 320, 500, 120)) self.tab4_brower_img.setObjectName("tab4_brower_img") self.winIconPix = QPixmap(16, 16) self.setWindowIcon(QIcon('mg.ico')) self.tray = QSystemTrayIcon(Dialog) self.trayIconPix = QPixmap(16, 16) self.tray.setIcon(QIcon('mg.ico')) ################################################################################################# self.js = QtWidgets.QPushButton(self.tab5) self.js.setGeometry(QtCore.QRect(80, 40, 130, 42)) self.js.setObjectName("js") self.ht = QtWidgets.QPushButton(self.tab5) self.ht.setGeometry(QtCore.QRect(260, 40, 130, 42)) self.ht.setObjectName("ht") self.browser = QWebEngineView(self.tab5) # 新增一个浏览器引擎 self.browser.setWindowTitle('QWebChannel交互Demo') with open("cs6.html", "w", encoding="utf-8") as f: f.write(html) url_string = "file:///cs6.html" # 内置的网页地址,此处我采用的是本地的。远程同样可以使用。 self.browser.load(QUrl(url_string)) # self.browser.(html) self.browser.resize(530, 280) self.browser.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:white;border-color:#FFF5EE;background-color:#012456;" ) ################################################## # 挂载到主界面 # # # ################################################## QtCore.QMetaObject.connectSlotsByName(Dialog) self.retranslateUi(Dialog) ################################################## # 自定义样式、点击事件模块 # # # ################################################## def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "小工具")) # Dialog.setStyleSheet("#Dialog{background-color:red;}") Dialog.setWindowIcon(QIcon('mg.ico')) # palette = QPalette() # palette.setBrush(QPalette.Background, QBrush( # QPixmap('01-4.jpg').scaled(self.tab.width(), self.tab.height()))) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "首页")) # self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab5), _translate("Dialog", "浏览器")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab3), _translate("Dialog", "pdf转换为text")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab4), _translate("Dialog", "pdf转换为word")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab5), _translate("Dialog", "tools")) "QTabBar::tab{min-height: 30px; min-width: 80px;border-top-right-radius:20px;border-radius:20px;}" self.tabWidget.setStyleSheet( "QTabBar{background-color:#333300;outline:solid 2px;}QTabBar::tab{border-bottom-color:#C2C7CB;min-width: " "150px;border-right:2px solid black;border-style: outset;min-height: 40px;" "color:white;background-color:#4169E1;}QTabBar::tab:selected{background-color: white;" "color:green;border-top-right-radius:10px;border-top-left-radius:10px;border:none}QTabBar::tab:first{margin-left:10px;}" "QTabBar::tab:hover:!selected{color:red;background-color:black;}") # self.tabWidget.setStyleSheet("QTabBar::tab:first:selected{background-color: white;}") # 有问题 self.tab.setStyleSheet("#tab1{background-color:#012456;}") self.tab3.setStyleSheet('#tab3{background-color:#012456;}') self.tab4.setStyleSheet('#tab4{background-color:#012456;}') self.tab5.setStyleSheet('#tab5{background-color:#012456;}') ################################################## # tab1按钮模块 样式 事件 # # # ################################################## self.mongo.setText(_translate("Dialog", "mongo")) icon = QIcon() icon.addPixmap(QPixmap("start.jpg"), QIcon.Normal, QIcon.Off) self.mongo.setIcon(icon) self.mongo.setIconSize(QtCore.QSize(60, 30)) self.mongo.setAutoRepeatDelay(200) self.mongo.clicked.connect(lambda: Dialog.yunxing(2, )) self.auth.setText(_translate("Dialog", "*作者*")) self.auth.clicked.connect(self.auth_qq) self.jupy.setIcon(icon) self.jupy.setIconSize(QtCore.QSize(60, 30)) self.jupy.setAutoRepeatDelay(200) self.jupy.setText(_translate("Dialog", "jupyter")) self.jupy.clicked.connect(lambda: Dialog.yunxing(1, )) self.base_str.setText(_translate("Dialog", "解码base64")) self.base_str.clicked.connect(self.b64_str) self.str_base.setText(_translate("Dialog", "转码base64")) self.str_base.clicked.connect(self.str_b64) self.cmps.setText(_translate("Dialog", "文本对比")) self.cmps.clicked.connect(self.cmp_text) ################################################## # 样式模块 # # # ################################################## self.lineEdit_3.setStyleSheet( "background:transparent;border-width:0.5;border-style:outset;color:#FF0000;border-color:white;" ) self.lineEdit_2.setStyleSheet( "background:transparent;border-width:0.5;border-style:outset;color:#BA55D3;border-color:white;" ) self.cmps.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.jupy.setStyleSheet( 'QPushButton{background-Color:white;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red;}' ) self.mongo.setStyleSheet( '#pushButton_mongo{background-Color:white;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red}' ) self.base_str.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) # self.base_str.setStyleSheet("") self.str_base.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.auth.setStyleSheet( 'QPushButton{background-Color: #FF0000;background:transparent;border-width:0;border-style:outset;color:#87CEFA}QPushButton:hover{color: red;}' ) self.auth.setFont(QFont("Mongolian Baiti", 20, QFont.Bold)) self.cmptext1.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:white;border-color:#FFF5EE;" ) self.cmptext2.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:white;border-color:#FFF5EE;" ) ################################################## # tab3模块 # # # ################################################## self.btn_chooseMutiFile.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}' ) self.btn_chooseMutiFile.clicked.connect(self.slot_btn_chooseMutiFile) self.textbrower3.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:white;font-size:30px;" ) ################################################## # tab4模块 # # # ################################################## self.btn_chooseMutiFile_tab4.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}' ) self.btn_chooseMutiFile_tab4.clicked.connect(self.run_pdf_parse) self.tab4_brower4.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:white;font-size:15px;" ) self.img_py.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}' ) self.img_py.clicked.connect(self.imgTopy) self.tab4_brower_img.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:white;font-size:15px;" ) ##################################################################################################################### self.js.setText(_translate("Dialog", "计算器")) self.js.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}' ) self.js.clicked.connect(lambda: Dialog.yunxing(3, )) self.ht.setText(_translate("Dialog", "画图")) self.ht.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red};background-attachment:scroll;' ) self.ht.clicked.connect(lambda: Dialog.yunxing(4, )) ################################################## # 计时器模块 # # # ################################################## self.timer = QTimer() self.timer.setInterval(1000) self.timer.timeout.connect(self.showtime) self.timer.start() # self.timer1 = QTimer() # self.timer1.setInterval(1000) # # self.timer1.timeout.connect(self.showtime) # self.timer1.timeout.connect(self.scp_r) # self.timer1.start() ################################################################################ # 初始调用爬虫模块 # ################################################################################## self.run_spider() def auth_qq(self): QMessageBox.question(self, 'waring', '仅供学习使用', QMessageBox.Yes, QMessageBox.Yes) def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) ################################################################################ # 两个转码函数 # ################################################################################## def b64_str(self): """ 解码 :param input_b64: :return: """ input_b64 = self.lineEdit_3.text() try: str_b6 = base64.b64decode(input_b64).decode(encoding='utf-8') self.lineEdit_2.setText(str_b6) except: QMessageBox.question(self, 'waring', '不是base64编码', QMessageBox.Yes, QMessageBox.Yes) def str_b64(self): """ 解码 :param input_b64: :return: """ input_b64 = self.lineEdit_2.text() b64_str = base64.b64encode(input_b64.encode('utf-8')) self.lineEdit_3.setText((b64_str).decode('utf-8')) ################################################################################ # 计时器函数 # ################################################################################## def showtime(self): self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self) self.dateEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss') test = self.dateEdit.text() # self.texttime.setText(test) self.texttime.display(test) self.texttime.setStyleSheet( 'font: italic 6pt \"Arial\";border-width:0;border-style:outset;color:#DC143C;' ) # self.texttime.setFont(QFont("Mongolian Baiti", 11, QFont.Bold)) ################################################################################ # 天气预报爬虫样式运行模块 # ################################################################################## def run_spider(self): result = spider_weath() ip = get_host_ip() QMessageBox.question( self, 'HI', '来自 %s %s %s的你,你好吖!' % (result[0], result[1], result[2]), QMessageBox.Yes, QMessageBox.Yes) self.textBrowser.setHtml( " <font color='red' >📍 </font>:%s %s %s <br /> <font color='#FF8C00' > ➤ </font>:%s <br /> " "<font color='#FF4500' >☎ </font>:%s" % (result[0], result[1], result[2], result[3], ip)) self.textBrowser.setFont(QFont("Mongolian Baiti", 10, QFont.Bold)) self.textBrowser.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color:white" ) self.textBrowser_6.setHtml("<font color='#FF8C00' >📢 💦</font>" + result[10] + " " + result[11]) self.textBrowser_6.setFont(QFont("Mongolian Baiti", 10, QFont.Bold)) self.textBrowser_6.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color:white" ) # ----------------------------------------------------------------------------------------- self.textBrowser_2.setText("%s°" % result[4]) # 温度 self.textBrowser_2.setFont(QFont("Mongolian Baiti", 40, QFont.Bold)) self.textBrowser_2.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color: white" ) # self.textBrowser_5.setText("") # 温度 # self.textBrowser_5.setFont(QFont("Mongolian Baiti", 15, QFont.Bold)) # self.textBrowser_5.setStyleSheet("background:transparent;border-width:0;border-style:outset;color: white") self.textBrowser_4.setHtml( "<font color='#00008B' >💧</font> 湿度%s%% %s %s%s级 %s " % (result[5], result[7], result[8], result[6], result[9])) # 温度 self.textBrowser_4.setFont(QFont("Mongolian Baiti", 15, QFont.Bold)) self.textBrowser_4.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color: white" ) ################################################################################ # 图片转换模块 # ################################################################################## def imgTopy(self, evn): self.tab4_brower_img.clear() QMessageBox.question(self, 'waring', '将在当前目录生成pics.py文件', QMessageBox.Yes, QMessageBox.Yes) py_name = 'pics' files, filetype = QFileDialog.getOpenFileNames( self, "选择文件", self.cwd, # 起始路径 "JPG Files (*.jpg);;PNG Files (*.png);;GIF Files (*.gif);;ICO Files (*.ico);;" ) if len(files) == 0: return # print(len(files)) for inx, file in enumerate(files): (file_path, tempfilename) = os.path.split(file) (filename, extension) = os.path.splitext(tempfilename) open_pic = open("%s" % file, 'rb') b64str = base64.b64encode(open_pic.read()) open_pic.close() # 注意这边b64str一定要加上.decode() sy = len(files) - inx - 1 with open('%s.py' % py_name, 'a+') as f: f.write('%s = "%s"\n' % (filename, b64str.decode())) self.tab4_brower_img.append("<font color='red' >" + "正在处理:" + tempfilename + "</font>" + "<br />" + "当前剩余:%s张" % sy) ################################################################################## # 选择文件模块 ################################################################################## def slot_btn_chooseMutiFile(self): self.textbrower3.clear() files, filetype = QFileDialog.getOpenFileNames( self, "选择文件", self.cwd, # 起始路径 "PDF Files (*.pdf);;") if len(files) == 0: # print("\n取消选择") return # print("\n你选择的文件为:") for file in files: texts = readPDF(file) self.textbrower3.append(texts + "-" * 122) ################################################################################## # 运行转换为word模块 ################################################################################## def run_pdf_parse(self): self.tab4_brower4.clear() files, filetype = QFileDialog.getOpenFileNames(self, "选择文件", self.cwd, "PDF Files (*.pdf);;") if len(files) == 0: # print("\n取消选择") return # print("\n你选择的文件为:") space = " " for file in files: texts = parser_pdfs(file) (filepath, tempfilename) = os.path.split(file) for text in texts: self.tab4_brower4.append("<font color='red' >" + "处理对象:" + tempfilename + "</font>" + "<br />" + "%s页面数:" % space + str(text[0]) + "<br />" + "%s图片数:" % space + str(text[1]) + "<br />" + "%s曲线数:" % space + str(text[2]) + "<br />" + "%s水平文本框:" % space + str(text[3]) + "<br />" + "<font color='red' >" + "-" * 40 + "</font>") ################################################################################ # 待完善 # ################################################################################## def cmp_text(self): test1 = self.cmptext1.toPlainText().strip() test2 = self.cmptext2.toPlainText().strip() a = list(test1) b = list(test2) indexs = [] a_len = len(a) b_len = len(b) if a_len > b_len: index_2 = range(b_len, a_len) for i, val in enumerate(b): try: if val != a[i]: print(val, i) indexs.append(i) except: pass indexs.extend(index_2) for k in indexs: a[k] = "<font color='red' >" + a[k] + "</font>" self.cmptext1.setHtml("".join(a)) elif a_len < b_len: index_2 = range(a_len, b_len) for i, val in enumerate(a): try: if val != b[i]: # print(val, i) indexs.append(i) except: pass indexs.extend(index_2) for m in indexs: b[m] = "<font color='red' >" + b[m] + "</font>" self.cmptext2.setHtml("".join(b)) else: for i, val in enumerate(a): try: if val != b[i]: # print(val, i) indexs.append(i) except: pass for k in indexs: a[k] = "<font color='red' >" + a[k] + "</font>" self.cmptext1.setHtml("".join(a))
class YiBanCY(QWidget): def __init__(self, base_path): super(YiBanCY, self).__init__() self.filename = base_path + "案件信息.xlsx" self.base_path = base_path style_str = "QLabel{font-size: 30px;}" + "QLineEdit{font-size: 30px;}" + \ "QPushButton{font-size: 25px; background-color: green; min-height: 35px}" + \ "QComboBox{font-size: 30px;}" + "QCheckBox{font-size: 30px;}" + \ "QHeaderView{font-size: 25px;} QTableWidget{font-size: 25px;}" + \ "QDateTimeEdit{font-size: 30px;} QMessageBox{font-size: 30px;} QTextEdit{font-color: red}" self.setStyleSheet(style_str) init_data = self.get_init_info() layout = QGridLayout() # 开始时间 self.label_start_time = QLabel("开始时间") if init_data["start_time"]: self.edit_start_time = QDateTimeEdit( datetime.strptime(init_data["start_time"], "%Y-%m-%d %H:%M")) else: self.edit_start_time = QDateTimeEdit(datetime.now()) self.edit_start_time.setDisplayFormat("yyyy-MM-dd HH:mm") layout.addWidget(self.label_start_time, 0, 0) layout.addWidget(self.edit_start_time, 0, 1) # 结束时间 self.label_end_time = QLabel("结束时间") if init_data["end_time"]: self.edit_end_time = QDateTimeEdit( datetime.strptime(init_data["end_time"], "%Y-%m-%d %H:%M")) else: self.edit_end_time = QDateTimeEdit(datetime.now()) self.edit_end_time.setDisplayFormat("yyyy-MM-dd HH:mm") layout.addWidget(self.label_end_time, 0, 2) layout.addWidget(self.edit_end_time, 0, 3) # 被检查人(工商户字号,公司名称) self.label_beijiancharen = QLabel("被检查人(工商户字号,公司名称)") if init_data["beijiancharen"]: self.edit_beijiancharen = QLineEdit(init_data["beijiancharen"]) else: self.edit_beijiancharen = QLineEdit() layout.addWidget(self.label_beijiancharen, 1, 0) layout.addWidget(self.edit_beijiancharen, 1, 1) # 联系方式 self.label_lianxifangshi = QLabel("联系方式") if init_data["lianxifangshi"]: self.edit_lianxifangshi = QLineEdit(init_data["lianxifangshi"]) else: self.edit_lianxifangshi = QLineEdit() layout.addWidget(self.label_lianxifangshi, 1, 2) layout.addWidget(self.edit_lianxifangshi, 1, 3) # 经营者姓名(法定代表人) self.label_jingyingzhe = QLabel("经营者姓名(法定代表人)") if init_data["jingyingzhe"]: self.edit_jingyingzhe = QLineEdit(init_data["jingyingzhe"]) else: self.edit_jingyingzhe = QLineEdit() layout.addWidget(self.label_jingyingzhe, 2, 0) layout.addWidget(self.edit_jingyingzhe, 2, 1) # 身份证件号码 self.label_shenfenzheng = QLabel("身份证件号码") if init_data["shenfenzheng"]: self.edit_shenfenzheng = QLineEdit(init_data["shenfenzheng"]) else: self.edit_shenfenzheng = QLineEdit() layout.addWidget(self.label_shenfenzheng, 2, 2) layout.addWidget(self.edit_shenfenzheng, 2, 3) # 身份证件地址 self.label_shenfenzheng_dizhi = QLabel("身份证件地址") if init_data["shenfenzheng_dizhi"]: self.edit_shenfenzheng_dizhi = QLineEdit( init_data["shenfenzheng_dizhi"]) else: self.edit_shenfenzheng_dizhi = QLineEdit() layout.addWidget(self.label_shenfenzheng_dizhi, 3, 0) layout.addWidget(self.edit_shenfenzheng_dizhi, 3, 1) # 烟草专卖许可证号码 self.label_xukezheng = QLabel("烟草专卖许可证号码") if init_data["xukezheng"]: self.edit_xukezheng = QLineEdit(init_data["xukezheng"]) else: self.edit_xukezheng = QLineEdit() layout.addWidget(self.label_xukezheng, 3, 2) layout.addWidget(self.edit_xukezheng, 3, 3) # 零售户类型 self.label_lingshouhu = QLabel("零售户类型") self.edit_lingshouhu = QComboBox() self.edit_lingshouhu.addItems(["个体零售户", "企业零售户"]) if init_data["lingshouhu"]: self.edit_lingshouhu.setCurrentText(init_data["lingshouhu"]) layout.addWidget(self.label_lingshouhu, 4, 0) layout.addWidget(self.edit_lingshouhu, 4, 1) # 举报时间(非举报不填写) self.jvbao_time = QLabel("举报时间(非举报不填写)") if init_data["jvbao_time"]: self.edit_jvbao_time = QDateTimeEdit( datetime.strptime(init_data["jvbao_time"], "%Y-%m-%d %H:%M")) else: self.edit_jvbao_time = QDateTimeEdit( datetime.strptime("2000-01-01 00:00", "%Y-%m-%d %H:%M")) self.edit_jvbao_time.setDisplayFormat("yyyy-MM-dd HH:mm") layout.addWidget(self.jvbao_time, 4, 2) layout.addWidget(self.edit_jvbao_time, 4, 3) # 案发时间 self.label_qita_guanxiren = QLabel("其他关系人") if init_data["qita_guanxiren"]: self.edit_qita_guanxiren = QLineEdit(init_data["qita_guanxiren"]) else: self.edit_qita_guanxiren = QLineEdit("店员") layout.addWidget(self.label_qita_guanxiren, 5, 0) layout.addWidget(self.edit_qita_guanxiren, 5, 1) # 执法人员 self.label_zhifarenyuan = QLabel("执法人员") if init_data["zhifarenyuan"]: self.edit_zhifarenyuan = QLineEdit(init_data["zhifarenyuan"]) else: self.edit_zhifarenyuan = QLineEdit() layout.addWidget(self.label_zhifarenyuan, 5, 2) layout.addWidget(self.edit_zhifarenyuan, 5, 3) # 许可证有效期 self.label_xukezheng_end = QLabel("许可证有效期") if init_data["xukezheng_end"]: self.edit_xukezheng_end = QDateEdit( datetime.strptime(init_data["xukezheng_end"], "%Y-%m-%d").date()) else: self.edit_xukezheng_end = QDateEdit(datetime.now().date()) self.edit_xukezheng_end.setDisplayFormat("yyyy-MM-dd") layout.addWidget(self.label_xukezheng_end, 6, 0) layout.addWidget(self.edit_xukezheng_end, 6, 1) # 许可证地址 self.label_location = QLabel("许可证地址") if init_data["location"]: self.edit_location = QLineEdit(init_data["location"]) else: self.edit_location = QLineEdit() layout.addWidget(self.label_location, 6, 2) layout.addWidget(self.edit_location, 6, 3) # 案由选择 self.label_anyou = QLabel("案由") self.edit_anyou = AnYou(init_data["anyou"]) layout.addWidget(self.label_anyou, 7, 0) layout.addWidget(self.edit_anyou, 7, 1, 1, 3) # 抽样规则 rule_str = '<p><font color="red">1.数量不足两条:抽取一条或全部数量形成试样。</font></p>' rule_str += '<p><font color="red">2.数量2件以下:所有样品中抽取1~2条形成试样。</font></p>' rule_str += '<p><font color="red">3.数量5件以下:每件抽取1~2条,形成样本,再从样本中随机抽取2条形成试样。</font></p>' rule_str += '<p><font color="red">4.数量5件~10件:每件中随机抽取1条,形成样本,在从样本中随机抽取2条形成试样。</font></p>' rule_str += '<p><font color="red">5.数量10件~50件:随机抽取10件,从每件中随机抽取1条,形成样本,再从样本中随机抽取2~5条形成试样。</font></p>' rule_str += '<p><font color="red">6.数量50件以上:随机抽取20件,从每件中随机抽取1条,形成样本,再从样本中随机抽取5~10条形成试样。</font></p>' self.chou_rule = QTextEdit() self.chou_rule.setHtml(rule_str) self.chou_rule.setFixedHeight(130) self.label_chou_rule = QLabel("抽样规则") layout.addWidget(self.label_chou_rule, 8, 0) layout.addWidget(self.chou_rule, 8, 1, 1, 3) # 抽样记录表 self.table_info = QTableWidget() self.table_info.setColumnCount(4) self.table_info.setHorizontalHeaderLabels( ["物品名称", "品牌规格", "查获数量(条)", "抽样数量(条)"]) self.table_info.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) if not init_data["chou_data"]: wb = openpyxl.load_workbook(self.filename) yan_datas = get_yan_info(wb) for yan_data in yan_datas: init_data["chou_data"].append({ "yan_name": yan_data["yan_name"], "yan_count": yan_data["yan_count"], "yan_chou": 1, "yan_pinzhong": yan_data["yan_pinzhong"] }) self.init_table(init_data["chou_data"]) # 提交按钮 self.btn_finish = QPushButton("完成") layout.addWidget(self.table_info, 9, 0, 1, 4) layout.addWidget(self.btn_finish, 10, 0, 1, 4) self.setLayout(layout) # 获取初始化信息 def get_init_info(self): wb = openpyxl.load_workbook(self.filename) try: ws = wb["一般案件"] except Exception as e: print(e) print("创建sheet") ws = wb.create_sheet(title="一般案件") anyou = ['', '', '', '', ''] if ws["B9"].value: anyou[0] = ws["B9"].value if ws["C9"].value: anyou[1] = ws["C9"].value if ws["D9"].value: anyou[2] = ws["D9"].value if ws["E9"].value: anyou[3] = ws["E9"].value if ws["E9"].value: anyou[4] = ws["F9"].value data = { "start_time": ws["B1"].value, "end_time": ws["B2"].value, "beijiancharen": ws["B3"].value, "lianxifangshi": ws["B4"].value, "jingyingzhe": ws["B5"].value, "shenfenzheng": ws["B6"].value, "shenfenzheng_dizhi": ws["B7"].value, "xukezheng": ws["B8"].value, "anyou": anyou, # B9 "lingshouhu": ws["B10"].value, "jvbao_time": ws["B11"].value, "qita_guanxiren": ws["B12"].value, "zhifarenyuan": ws["B13"].value, "xukezheng_end": ws["B14"].value, "location": ws["B15"].value, "chou_data": get_chou_data(ws) } wb.save(self.filename) return data # 渲染图表 def init_table(self, datas): self.table_info.setRowCount(len(datas)) for index, data in enumerate(datas): self.table_info.setItem(index, 0, QTableWidgetItem(data["yan_pinzhong"])) self.table_info.setItem(index, 1, QTableWidgetItem(data["yan_name"])) self.table_info.setItem(index, 2, QTableWidgetItem(str(data["yan_count"]))) self.table_info.setCellWidget(index, 3, QLineEdit(str(data["yan_chou"]))) # 清空抽样数据 def clear_chou_data(self, ws): index = 16 while (True): yan_name = ws["A" + str(index)].value if not yan_name: break ws["A" + str(index)] = "" ws["B" + str(index)] = "" ws["C" + str(index)] = "" ws["D" + str(index)] = "" # 存储抽样数据 def handle_chou_data(self, ws): start_index = 16 self.clear_chou_data(ws) for index in range(self.table_info.rowCount()): ws["A" + str(index + start_index)] = self.table_info.item( index, 0).text() ws["B" + str(index + start_index)] = self.table_info.item( index, 1).text() ws["C" + str(index + start_index)] = self.table_info.item( index, 2).text() ws["D" + str(index + start_index)] = self.table_info.cellWidget( index, 3).text() # 处理数据 def handle_info(self): result = {} start_time = self.edit_start_time.text() if not start_time: QMessageBox.critical(self, "错误", "请填写开始时间", QMessageBox.Yes) return False result["start_time"] = datetime.strptime(start_time, "%Y-%m-%d %H:%M") end_time = self.edit_end_time.text() if not end_time: QMessageBox.critical(self, "错误", "请填写结束时间", QMessageBox.Yes) return False result["end_time"] = datetime.strptime(end_time, "%Y-%m-%d %H:%M") beijiancharen = self.edit_beijiancharen.text() if not beijiancharen: QMessageBox.critical(self, "错误", "请填写被检查人(工商户字号,公司名称)", QMessageBox.Yes) return False result["beijiancharen"] = beijiancharen lianxifangshi = self.edit_lianxifangshi.text() if not lianxifangshi: QMessageBox.critical(self, "错误", "请填写联系方式", QMessageBox.Yes) return False result["lianxifangshi"] = lianxifangshi jingyingzhe = self.edit_jingyingzhe.text() if not jingyingzhe: QMessageBox.critical(self, "错误", "请填写经营者姓名(法定代表人)", QMessageBox.Yes) return False result["jingyingzhe"] = jingyingzhe shenfenzheng = self.edit_shenfenzheng.text() if not shenfenzheng: QMessageBox.critical(self, "错误", "请填写经营者身份证件号", QMessageBox.Yes) return False else: try: get_info_from_idcard(shenfenzheng) except Exception as e: QMessageBox.critical(self, "错误", "请填写正确的经营者身份证号", QMessageBox.Yes) return False result["shenfenzheng"] = shenfenzheng shenfenzheng_dizhi = self.edit_shenfenzheng_dizhi.text() if not shenfenzheng_dizhi: QMessageBox.critical(self, "错误", "请填写经营者身份证件地址", QMessageBox.Yes) return False result["shenfenzheng_dizhi"] = shenfenzheng_dizhi xukezheng = self.edit_xukezheng.text() # if not xukezheng: # QMessageBox.critical(self, "错误", "请填写烟草专卖许可证号码", QMessageBox.Yes) # return False result["xukezheng"] = xukezheng anyou_status, anyou = self.edit_anyou.get_anyou_info() if not anyou_status: QMessageBox.critical(self, "错误", "请勾选案由", QMessageBox.Yes) return False result["anyou"] = anyou lingshouhu = self.edit_lingshouhu.currentText() result["lingshouhu"] = lingshouhu jvbao_time = self.edit_jvbao_time.text() result["jvbao_time"] = jvbao_time zhifarenyuan = self.edit_zhifarenyuan.text() if not zhifarenyuan: QMessageBox.critical(self, "错误", "请填写执法人员信息", QMessageBox.Yes) return False result["zhifarenyuan"] = zhifarenyuan xukezheng_end = self.edit_xukezheng_end.text() result["xukezheng_end"] = datetime.strptime(xukezheng_end, "%Y-%m-%d").date() location = self.edit_location.text() if not location: QMessageBox.critical(self, "错误", "请填写许可证地址", QMessageBox.Yes) return False result["location"] = location qita_guanxiren = self.edit_qita_guanxiren.text() result["qita_guanxiren"] = qita_guanxiren # 存储数据 wb = openpyxl.load_workbook(self.filename) ws = wb["一般案件"] ws["A1"] = "开始时间" ws["B1"] = start_time ws["A2"] = "结束时间" ws["B2"] = end_time ws["A3"] = "被检查人(工商户字号,公司名称)" ws["B3"] = beijiancharen ws["A4"] = "联系方式" ws["B4"] = lianxifangshi ws["A5"] = "经营者姓名(法定代表人)" ws["B5"] = jingyingzhe ws["A6"] = "身份证件号码" ws["B6"] = shenfenzheng ws["A7"] = "身份证件地址" ws["B7"] = shenfenzheng_dizhi ws["A8"] = "烟草专卖许可证号码" ws["B8"] = xukezheng ws["A9"] = "案由" ws["B9"] = anyou[0] ws["C9"] = anyou[1] ws["D9"] = anyou[2] ws["E9"] = anyou[3] ws["F9"] = anyou[4] ws["A10"] = "零售户类型" ws["B10"] = lingshouhu ws["A11"] = "举报时间" ws["B11"] = jvbao_time ws["A12"] = "其他关系人" ws["B12"] = qita_guanxiren ws["A13"] = "执法人员" ws["B13"] = zhifarenyuan ws["A14"] = "许可证有效期" ws["B14"] = xukezheng_end ws["A15"] = "许可证地址" ws["B15"] = location # 存储抽样信息 self.handle_chou_data(ws) wb.save(self.filename) createYiBan(wb, result, self.base_path) wb.save(self.filename) return True
class XiaoWeiXB(QWidget): def __init__(self, base_path): super(XiaoWeiXB, self).__init__() self.filename = base_path + "案件信息.xlsx" self.base_path = base_path style_str = "QLabel{font-size: 30px;}" + "QLineEdit{font-size: 30px;}" + \ "QPushButton{font-size: 25px; background-color: green; min-height: 30px}" + \ "QComboBox{font-size: 30px;}" + "QCheckBox{font-size: 30px;}" + \ "QHeaderView{font-size: 25px;} QTableWidget{font-size: 25px;}" + \ "QDateTimeEdit{font-size: 30px;} QMessageBox{font-size: 30px;}" self.setStyleSheet(style_str) init_data = self.get_init_info() layout = QGridLayout() # 开始时间 self.label_start_time = QLabel("开始时间") if init_data["start_time"]: self.edit_start_time = QDateTimeEdit( datetime.strptime(init_data["start_time"], "%Y-%m-%d %H:%M")) else: self.edit_start_time = QDateTimeEdit(datetime.now()) self.edit_start_time.setDisplayFormat("yyyy-MM-dd HH:mm") layout.addWidget(self.label_start_time, 0, 0) layout.addWidget(self.edit_start_time, 0, 1) # 结束时间 self.label_end_time = QLabel("结束时间") if init_data["end_time"]: self.edit_end_time = QDateTimeEdit( datetime.strptime(init_data["end_time"], "%Y-%m-%d %H:%M")) else: self.edit_end_time = QDateTimeEdit(datetime.now()) self.edit_end_time.setDisplayFormat("yyyy-MM-dd HH:mm") layout.addWidget(self.label_end_time, 0, 2) layout.addWidget(self.edit_end_time, 0, 3) # 被检查人(工商户字号,公司名称) self.label_beijiancharen = QLabel("被检查人(工商户字号,公司名称)") if init_data["beijiancharen"]: self.edit_beijiancharen = QLineEdit(init_data["beijiancharen"]) else: self.edit_beijiancharen = QLineEdit() layout.addWidget(self.label_beijiancharen, 1, 0) layout.addWidget(self.edit_beijiancharen, 1, 1) # 联系方式 self.label_lianxifangshi = QLabel("联系方式") if init_data["lianxifangshi"]: self.edit_lianxifangshi = QLineEdit(init_data["lianxifangshi"]) else: self.edit_lianxifangshi = QLineEdit() layout.addWidget(self.label_lianxifangshi, 1, 2) layout.addWidget(self.edit_lianxifangshi, 1, 3) # 经营者姓名(法定代表人) self.label_jingyingzhe = QLabel("经营者姓名(法定代表人)") if init_data["jingyingzhe"]: self.edit_jingyingzhe = QLineEdit(init_data["jingyingzhe"]) else: self.edit_jingyingzhe = QLineEdit() layout.addWidget(self.label_jingyingzhe, 2, 0) layout.addWidget(self.edit_jingyingzhe, 2, 1) # 身份证件号码 self.label_shenfenzheng = QLabel("身份证件号码") if init_data["shenfenzheng"]: self.edit_shenfenzheng = QLineEdit(init_data["shenfenzheng"]) else: self.edit_shenfenzheng = QLineEdit() layout.addWidget(self.label_shenfenzheng, 2, 2) layout.addWidget(self.edit_shenfenzheng, 2, 3) # 身份证件地址 self.label_shenfenzheng_dizhi = QLabel("身份证件地址") if init_data["shenfenzheng_dizhi"]: self.edit_shenfenzheng_dizhi = QLineEdit( init_data["shenfenzheng_dizhi"]) else: self.edit_shenfenzheng_dizhi = QLineEdit() layout.addWidget(self.label_shenfenzheng_dizhi, 3, 0) layout.addWidget(self.edit_shenfenzheng_dizhi, 3, 1) # 烟草专卖许可证号码 self.label_xukezheng = QLabel("烟草专卖许可证号码") if init_data["xukezheng"]: self.edit_xukezheng = QLineEdit(init_data["xukezheng"]) else: self.edit_xukezheng = QLineEdit() layout.addWidget(self.label_xukezheng, 3, 2) layout.addWidget(self.edit_xukezheng, 3, 3) # 委托人姓名 self.label_weituoren = QLabel("委托人姓名") if init_data["weituoren"]: self.edit_weituoren = QLineEdit(init_data["weituoren"]) else: self.edit_weituoren = QLineEdit() layout.addWidget(self.label_weituoren, 4, 0) layout.addWidget(self.edit_weituoren, 4, 1) # 身份证件号码 self.label_shenfenzheng1 = QLabel("身份证件号码") if init_data["shenfenzheng1"]: self.edit_shenfenzheng1 = QLineEdit(init_data["shenfenzheng1"]) else: self.edit_shenfenzheng1 = QLineEdit() layout.addWidget(self.label_shenfenzheng1, 4, 2) layout.addWidget(self.edit_shenfenzheng1, 4, 3) # 案由选择 self.label_anyou = QLabel("案由") layout.addWidget(self.label_anyou, 5, 0) self.edit_anyou = AnYou(init_data["anyou"]) layout.addWidget(self.edit_anyou, 5, 1, 1, 3) self.label_location = QLabel("许可证地址") self.edit_location = QLineEdit() if init_data["location"]: self.edit_location.setText(init_data["location"]) layout.addWidget(self.label_location, 6, 0) layout.addWidget(self.edit_location, 6, 1) # 分类table self.table_info = QTableWidget() self.table_info.setColumnCount(6) self.table_info.setHorizontalHeaderLabels( ["品牌", "规格", "数量", "总价", "特征1", "特征2"]) self.table_info.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) wb = openpyxl.load_workbook(self.filename) yan_datas = get_yan_info(wb) wb.close() self.setUI_table(yan_datas) layout.addWidget(self.table_info, 7, 0, 1, 4) # 完成按钮 self.btn_finish = QPushButton("完成") layout.addWidget(self.btn_finish, 8, 0, 1, 4) # 设置格式 self.setLayout(layout) # 初始化数据 def get_init_info(self): wb = openpyxl.load_workbook(self.filename) try: ws = wb["小微案件"] except Exception as e: print(e) print("创建sheet") ws = wb.create_sheet(title="小微案件") anyou = ['', '', '', '', ''] if ws["B11"].value: anyou[0] = ws["B11"].value if ws["C11"].value: anyou[1] = ws["C11"].value if ws["D11"].value: anyou[2] = ws["D11"].value if ws["E11"].value: anyou[3] = ws["E11"].value if ws["E12"].value: anyou[4] = ws["F11"].value data = { "start_time": ws["B1"].value, "end_time": ws["B2"].value, "beijiancharen": ws["B3"].value, "lianxifangshi": ws["B4"].value, "jingyingzhe": ws["B5"].value, "shenfenzheng": ws["B6"].value, "shenfenzheng_dizhi": ws["B7"].value, "xukezheng": ws["B8"].value, "weituoren": ws["B9"].value, "shenfenzheng1": ws["B10"].value, "anyou": anyou, "location": ws["B12"].value } wb.save(self.filename) return data # 存储输入的数据 def handle_info(self): result_data = {} start_time = self.edit_start_time.text() if not start_time: QMessageBox.critical(self, "错误", "请填写开始时间", QMessageBox.Yes) return False result_data["start_time"] = datetime.strptime(start_time, "%Y-%m-%d %H:%M") end_time = self.edit_end_time.text() if not end_time: QMessageBox.critical(self, "错误", "请填写结束时间", QMessageBox.Yes) return False result_data["end_time"] = datetime.strptime(end_time, "%Y-%m-%d %H:%M") beijiancharen = self.edit_beijiancharen.text() if not beijiancharen: QMessageBox.critical(self, "错误", "请填写被检查人(工商户字号,公司名称)", QMessageBox.Yes) return False result_data["beijiancharen"] = beijiancharen lianxifangshi = self.edit_lianxifangshi.text() if not lianxifangshi: QMessageBox.critical(self, "错误", "请填写联系方式", QMessageBox.Yes) return False result_data["lianxifangshi"] = lianxifangshi jingyingzhe = self.edit_jingyingzhe.text() # if not jingyingzhe: # QMessageBox.critical(self, "错误", "请填写经营者姓名(法定代表人)", QMessageBox.Yes) # return False result_data["jingyingzhe"] = jingyingzhe shenfenzheng = self.edit_shenfenzheng.text() if shenfenzheng: try: get_info_from_idcard(shenfenzheng) except Exception as e: QMessageBox.critical(self, "错误", "请填写正确的经营者身份证号", QMessageBox.Yes) return False result_data["shenfenzheng"] = shenfenzheng shenfenzheng_dizhi = self.edit_shenfenzheng_dizhi.text() result_data["shenfenzheng_dizhi"] = shenfenzheng_dizhi xukezheng = self.edit_xukezheng.text() if not xukezheng: QMessageBox.critical(self, "错误", "请填写烟草专卖许可证号码", QMessageBox.Yes) return False result_data["xukezheng"] = xukezheng weituoren = self.edit_weituoren.text() result_data["weituoren"] = weituoren shenfenzheng1 = self.edit_shenfenzheng1.text() if shenfenzheng1: try: get_info_from_idcard(shenfenzheng1) except Exception as e: QMessageBox.critical(self, "错误", "请填写正确的委托人身份证号", QMessageBox.Yes) return False result_data["shenfenzheng1"] = shenfenzheng1 location = self.edit_location.text() if not location: QMessageBox.critical(self, "错误", "请填写许可证地址", QMessageBox.Yes) return False result_data["location"] = location anyou_status, anyou = self.edit_anyou.get_anyou_info() if not anyou_status: QMessageBox.critical(self, "错误", "请勾选案由", QMessageBox.Yes) return False result_data["anyou"] = anyou # 校验都通过后-存储数据 wb = openpyxl.load_workbook(self.filename) ws = wb["小微案件"] ws["A1"] = "开始时间" ws["B1"] = start_time ws["A2"] = "结束时间" ws["B2"] = end_time ws["A3"] = "被检查人(工商户字号,公司名称)" ws["B3"] = beijiancharen ws["A4"] = "联系方式" ws["B4"] = lianxifangshi ws["A5"] = "经营者姓名(法定代表人)" ws["B5"] = jingyingzhe ws["A6"] = "身份证件号码" ws["B6"] = shenfenzheng ws["A7"] = "身份证件地址" ws["B7"] = shenfenzheng_dizhi ws["A8"] = "烟草专卖许可证号码" ws["B8"] = xukezheng ws["A9"] = "委托人姓名" ws["B9"] = weituoren ws["A10"] = "委托人身份证件号码" ws["B10"] = shenfenzheng1 ws["A11"] = "案由" ws["B11"] = anyou[0] ws["C11"] = anyou[1] ws["D11"] = anyou[2] ws["E11"] = anyou[3] ws["F11"] = anyou[4] ws["A12"] = "许可证地址" ws["B12"] = location # 处理表格数据 self.handle_table_info(ws) # 最终保存 createXiaoWei(wb, result_data, self.base_path) wb.save(self.filename) return True # 显示违规烟草信息的表格 def setUI_table(self, yan_datas): for index, yan_data in enumerate(yan_datas): self.table_info.setRowCount(index + 1) yan_pinpai, yan_guige = get_pinpai_and_guige(yan_data["yan_name"]) self.table_info.setItem(index, 0, QTableWidgetItem(yan_pinpai)) self.table_info.setItem(index, 1, QTableWidgetItem(yan_guige)) self.table_info.setItem( index, 2, QTableWidgetItem( str(yan_data["yan_count"]) + ' ' + yan_data["yan_unit"])) comb_box1 = QComboBox() comb_box1.addItems(tezheng1) comb_box2 = QComboBox() comb_box2.addItems(tezheng2) self.table_info.setCellWidget(index, 4, comb_box1) self.table_info.setCellWidget(index, 5, comb_box2) self.table_info.setItem(index, 3, QTableWidgetItem(yan_data["yan_total"])) # 存储违规烟草信息的分类 def handle_table_info(self, ws): for index in range(self.table_info.rowCount()): ws["A" + str(index + 14)] = self.table_info.item(index, 0).text() ws["B" + str(index + 14)] = self.table_info.item(index, 1).text() ws["C" + str(index + 14)] = self.table_info.item( index, 2).text().split(' ')[0] ws["F" + str(index + 14)] = self.table_info.item( index, 2).text().split(' ')[1] ws["D" + str(index + 14)] = self.table_info.item(index, 3).text() ws["E" + str(index + 14)] = get_tezheng_info( self.table_info.cellWidget(index, 4).currentIndex(), self.table_info.cellWidget(index, 5).currentIndex())
class Upload(QWidget): def __init__(self): super(Upload, self).__init__() self.switch = True self.initUI() def initUI(self): #源文件选择按钮和选择编辑框 self.source_btn = QPushButton('源文件', self) self.source_btn.move(30, 30) self.source_btn.resize(80,30) self.source_btn.clicked.connect(self.select_source) self.source_le = QLineEdit(self) self.source_le.move(120, 30) self.source_le.resize(250,30) #抖音视频分类输入框和提示 self.catLabel = QLabel(self) self.catLabel.move(30, 75) self.catLabel.resize(100,30) self.catLabel.setText("抖音视频分类:") self.combo_from = QComboBox(self) self.cat_form = '体育' self.combo_from.addItems(['体育', '音乐', '搞笑', '影视', '娱乐', '舞蹈', '情感', '知识', '动植物', '剧情', '游戏', '才艺', '时尚', '美食', '文化教育', '动漫二次元', '亲子', '旅行', '汽车', '科技', '政务', '创意', '校园', '日常生活', '新闻资讯', '三农', '其他']) self.combo_from.activated[str].connect(self.onLanFromActivated) self.combo_from.move(120, 75) self.combo_from.resize(250, 30) #发布时间间隔输入框和提示 self.gapLabel = QLabel(self) self.gapLabel.move(30, 120) self.gapLabel.resize(100,30) self.gapLabel.setText("发布时间间隔:") self.gap_le = QLineEdit('1', self) self.gap_le.move(120,120) self.gap_le.resize(250, 30) # 时间选择器 self.dateTimeLabel = QLabel(self) self.dateTimeLabel.move(30, 165) self.dateTimeLabel.resize(100,30) self.dateTimeLabel.setText("发布开始时间:") self.dateTime_le = QDateTimeEdit(QDateTime.currentDateTime(), self) self.dateTime_le.setDisplayFormat("yyyy-MM-dd HH:mm") self.dateTime_le.move(120, 165) self.dateTime_le.resize(250, 30) #上传按钮 self.save_btn = QPushButton('开始上传',self) self.save_btn.move(200, 220) self.save_btn.resize(140, 30) self.save_btn.clicked.connect(self.kick) #用户提示区 self.result_le = QLabel('视频分类与抖音后台保持一致', self) self.result_le.move(30, 270) self.result_le.resize(340, 30) self.result_le.setStyleSheet('color: blue;') #整体界面设置 self.resize(400, 400) 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 select_source(self): dir_path = QFileDialog.getExistingDirectory(self, "请选择文件夹路径", "C:/") self.source_le.setText(str(dir_path)) def set_label_func(self, text): self.result_le.setText(text) def onLanFromActivated(self, text): self.cat_form = text def switch_func(self, bools): self.switch = bools def kick(self): source = self.source_le.text().strip()#源文件夹路径 category = self.cat_form.strip()#视频分类 gap = self.gap_le.text().strip()#时间间隔 # start_time = str(self.dateTime_le.text())#定时发布开始时间 # start_time = time.mktime(time.strptime(self.dateTime_le.text(), '%Y-%m-%d %H:%M'))#定时发布开始时间 start_time = datetime.datetime.strptime(self.dateTime_le.text(),"%Y-%m-%d %H:%M")#定时发布开始时间 if self.switch and source != '' and category != '' and gap != '': self.switch = False self.set_label_func('请耐心等待,正在打开浏览器!') self.my_thread = MyThread(source, category, gap, start_time, self.set_label_func)#实例化线程对象 self.my_thread.start()#启动线程 self.my_thread.my_signal.connect(self.switch_func)
class Ui_Dialog(QWidget): def setupUi(self, Dialog): """ UI模块 :param Dialog:主界面 :return: """ Dialog.setObjectName("Dialog") Dialog.resize(1116, 738) self.cwd = os.getcwd() self.tabWidget = QtWidgets.QTabWidget(Dialog) self.tabWidget.setGeometry(QtCore.QRect(-10, 0, 1121, 741)) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.tabWidget.setDocumentMode(True) self.setAcceptDrops(True) self.outers = QtWidgets.QPushButton(self.tab) self.outers.setGeometry(QtCore.QRect(60, 110, 100, 40)) self.outers.setObjectName("outers") self.outer_y = QtWidgets.QRadioButton(self.tab) self.outer_y.setGeometry(QtCore.QRect(200, 100, 89, 16)) self.outer_y.setObjectName("outer_y") self.outer_x = QtWidgets.QRadioButton(self.tab) self.outer_x.setGeometry(QtCore.QRect(200, 150, 89, 16)) self.outer_x.setObjectName("outer_x") self.show_files = QtWidgets.QTextBrowser(self.tab) self.show_files.setGeometry(QtCore.QRect(360, 60, 271, 131)) self.show_files.setObjectName("show_files") # self.pushButton_2 = QtWidgets.QPushButton(self.tab) # self.pushButton_2.setGeometry(QtCore.QRect(60, 290, 100, 40)) # self.pushButton_2.setObjectName("pushButton_2") # # self.radioButton_3 = QtWidgets.QRadioButton(self.tab) # self.radioButton_3.setGeometry(QtCore.QRect(200, 270, 89, 16)) # self.radioButton_3.setObjectName("radioButton_3") # # self.radioButton_4 = QtWidgets.QRadioButton(self.tab) # self.radioButton_4.setGeometry(QtCore.QRect(200, 330, 89, 16)) # self.radioButton_4.setObjectName("radioButton_4") self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, "") self.groups_up = QButtonGroup() self.groups_up.addButton(self.outer_y, 11) self.groups_up.addButton(self.outer_x, 21) self.texttime = QtWidgets.QLCDNumber(self.tab) self.texttime.setGeometry(QtCore.QRect(0, 0, 500, 30)) self.texttime.setMouseTracking(False) self.texttime.setDigitCount(19) self.texttime.setMode(QLCDNumber.Dec) self.texttime.setSegmentStyle(QLCDNumber.Flat) self.texttime.setObjectName("texttime") self.pdf = QtWidgets.QPushButton(self.tab) self.pdf.setObjectName("btn_chooseMutiFile") self.pdf.setText("pdf文本提取") self.pdf.setGeometry(QtCore.QRect(700, 100, 200, 40)) self.pdf_show = QtWidgets.QTextBrowser(self.tab) self.pdf_show.setGeometry(QtCore.QRect(650, 150, 300, 500)) self.pdf_show.setObjectName("y_text") self.weather = QtWidgets.QTextBrowser(self.tab) self.weather.setGeometry(QtCore.QRect(50, 300, 600, 200)) self.weather.setObjectName("weather") self.winIconPix = QPixmap(16, 16) self.setWindowIcon(QIcon('mg.ico')) self.retranslateUi(Dialog) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "TOOLS")) Dialog.setWindowIcon(QIcon('mg.ico')) self.outers.setText(_translate("Dialog", "全连接")) self.outer_y.setText(_translate("Dialog", "横向")) self.outer_x.setText(_translate("Dialog", "竖向")) # self.pushButton_2.setText(_translate("Dialog", "交集")) # self.radioButton_3.setText(_translate("Dialog", "横向")) # self.radioButton_4.setText(_translate("Dialog", "横向")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Tool", "主页")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "。。。")) self.outers.clicked.connect(self.Chose_file) self.outers.clicked.connect( lambda: Dialog.yunxing(direction, 'outer', self.show_files.toPlainText().split())) self.timer = QTimer() self.timer.setInterval(1000) self.timer.timeout.connect(self.showtime) self.timer.start() self.pdf.clicked.connect(self.run_pdf_parse) self.Function_outer() self.Css() self.run_spider() def Function_outer(self): """ 槽函数挂载函数 :return: """ # self.outers.clicked.connect(self.Chose_file) self.groups_up.buttonClicked.connect(self.Chose_types) def Css(self): self.tab.setStyleSheet("#tab{background-color:#012456;}") self.tab_2.setStyleSheet("#tab_2{background-color:#012456;}") self.tabWidget.setStyleSheet( "QTabBar{background-color:#333300;outline:solid 2px;}QTabBar::tab{border-bottom-color:#C2C7CB;min-width: " "150px;border-right:2px solid black;border-style: outset;min-height: 40px;" "color:white;background-color:#4169E1;}QTabBar::tab:selected{background-color: white;" "color:green;border-top-right-radius:10px;border-top-left-radius:10px;border:none}QTabBar::tab:first{margin-left:20px;}" "QTabBar::tab:hover:!selected{color:red;background-color:black;}") self.outers.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.outer_y.setStyleSheet("color:white") self.outer_x.setStyleSheet("color:white") self.show_files.setStyleSheet( "background:transparent;border-style:outset;color:#FF8C00;border-color:#FFF5EE;" ) # self.pushButton_2.setStyleSheet( # 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}') self.pdf.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.pdf_show.setStyleSheet( "background:transparent;border-style:outset;color:#FF8C00;border-color:#FFF5EE;font-size:20px;" ) def showtime(self): """ 显示时间模块 :return: None """ self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self) self.dateEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss') test = self.dateEdit.text() # self.texttime.setText(test) self.texttime.display(test) self.texttime.setStyleSheet( 'font: italic 1px \"宋体\";border-width:0;border-style:outset;color:#DC143C;font-size:1px;' ) def Chose_file(self): """ 选择多个文件 :return: """ files, filetype = QFileDialog.getOpenFileNames(self, "选择文件", self.cwd, "Excle (*.xlsx);;") if len(files) == 0: return for i in files: self.show_files.append(i) return def Chose_types(self): """ 选择合并类型函数 :return: """ sender = self.sender() global direction if sender == self.groups_up: if self.groups_up.checkedId() == 11: # print('chosE函数',sender) direction = 1 elif self.groups_up.checkedId() == 21: direction = 0 return def run_pdf_parse(self): """ pdf转换模块(后期优化,放进子进程模块) :return: 同文件名word版本.eg:文件.pdf --- 文件.doc """ self.pdf_show.clear() files, filetype = QFileDialog.getOpenFileNames(self, "选择文件", self.cwd, "PDF Files (*.pdf);;") if len(files) == 0: return for file in files: texts = readPDF(file) self.pdf_show.append(texts) return def run_spider(self): result = spider_weath() # ip = get_host_ip() # QMessageBox.question(self, 'HI', '来自 %s %s %s的你,你好吖!'%(result[0], result[1], result[2]), # QMessageBox.Yes, QMessageBox.Yes) # self.weather.setHtml( # " <font color='red' >📍 </font>:%s %s %s <br /> <font color='#FF8C00' > ➤ </font>:%s <br /> " # "<font color='#FF4500' >☎ </font>:%s" % ( # result[0], result[1], result[2], result[3], 'uu')) self.weather.setFont(QFont("Mongolian Baiti", 10, QFont.Bold)) self.weather.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color:white" ) # self.weather.setHtml("<font color='#FF8C00' >555</font>" + result[10] + " " + result[11]) self.weather.setFont(QFont("Mongolian Baiti", 10, QFont.Bold)) self.weather.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color:white" ) # ----------------------------------------------------------------------------------------- self.weather.setText("%s°" % result[4]) # 温度 self.weather.setFont(QFont("Mongolian Baiti", 40, QFont.Bold)) self.weather.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color: white" ) # self.textBrowser_5.setText("") # 温度 # self.textBrowser_5.setFont(QFont("Mongolian Baiti", 15, QFont.Bold)) # self.textBrowser_5.setStyleSheet("background:transparent;border-width:0;border-style:outset;color: white") self.weather.setHtml( "<font color='#FF8C00' >%s %s</font><br/> <font color='green' >湿度%s%% </font><br/> %s %s%s级 %s <br/> <font color='green' >%s</font><br/>" % (result[0], result[1], result[5], result[7], result[8], result[6], result[9], result[-1])) # 温度 self.weather.setFont(QFont("Mongolian Baiti", 15, QFont.Bold)) self.weather.setStyleSheet( "background:transparent;border-width:0;border-style:outset;color: white" ) return
class ReleasePetDialog(QDialog): def __init__(self, UserId): super(ReleasePetDialog, self).__init__() self.UserId = UserId self.filePath = "" self.type = "" self.froml = "" self.fromt = "" self.stayl = "" self.resize(800, 500) self.setWindowTitle('myPet——发布招领') self.setWindowIcon(QIcon('./images/icon.png')) self.initUI() def initUI(self): self.plabel = QLabel(self) self.plabel.setFixedSize(370, 370) self.plabel.move(20, 20) self.hbox11 = QHBoxLayout() self.hbox11.addStretch(1) self.hbox11.addWidget(self.plabel) self.hbox11.addStretch(1) self.obtn = QPushButton(self) self.obtn.setText("打开本地图片") self.obtn.setFont(QFont("苏新诗柳楷繁", 15)) self.obtn.resize(200, 50) self.obtn.move(560, 30) self.obtn.clicked.connect(self.openimage) self.obtn.setFixedSize(180, 50) self.hbox12 = QHBoxLayout() self.hbox12.addStretch(1) self.hbox12.addWidget(self.obtn) self.hbox12.addStretch(1) self.vbox1 = QVBoxLayout() self.vbox1.addLayout(self.hbox11) self.vbox1.addLayout(self.hbox12) self.typelabel = QLabel() self.typelabel.setText("动物种类") self.typelabel.setFont(QFont("苏新诗柳楷繁", 13)) self.typeedit = QLineEdit() self.typeedit.setFixedSize(180, 30) self.typeedit.setFont(QFont("苏新诗柳楷繁", 13)) self.hbox21 = QHBoxLayout() self.hbox21.addStretch(1) self.hbox21.addWidget(self.typelabel) self.hbox21.addStretch(1) self.hbox21.addWidget(self.typeedit) self.hbox21.addStretch(1) self.fromllabel = QLabel() self.fromllabel.setText("出现地点") self.fromllabel.setFont(QFont("苏新诗柳楷繁", 13)) self.fromledit = QLineEdit() self.fromledit.setFixedSize(180, 30) self.fromledit.setFont(QFont("苏新诗柳楷繁", 13)) self.hbox22 = QHBoxLayout() self.hbox22.addStretch(1) self.hbox22.addWidget(self.fromllabel) self.hbox22.addStretch(1) self.hbox22.addWidget(self.fromledit) self.hbox22.addStretch(1) self.fromtlabel = QLabel() self.fromtlabel.setText("出现时间") self.fromtlabel.setFont(QFont("苏新诗柳楷繁", 13)) self.fromtedit = QDateTimeEdit() self.fromtedit.setFixedSize(180, 30) self.fromtedit.setFont(QFont("苏新诗柳楷繁", 13)) self.hbox23 = QHBoxLayout() self.hbox23.addStretch(1) self.hbox23.addWidget(self.fromtlabel) self.hbox23.addStretch(1) self.hbox23.addWidget(self.fromtedit) self.hbox23.addStretch(1) self.stayllabel = QLabel() self.stayllabel.setText("收留地点") self.stayllabel.setFont(QFont("苏新诗柳楷繁", 13)) self.stayledit = QLineEdit() self.stayledit.setFixedSize(180, 30) self.stayledit.setFont(QFont("苏新诗柳楷繁", 13)) self.hbox24 = QHBoxLayout() self.hbox24.addStretch(1) self.hbox24.addWidget(self.stayllabel) self.hbox24.addStretch(1) self.hbox24.addWidget(self.stayledit) self.hbox24.addStretch(1) self.rbtn = QPushButton(self) self.rbtn.setText("发布招领") self.rbtn.setFont(QFont("苏新诗柳楷繁", 15)) self.rbtn.resize(200, 50) self.rbtn.move(560, 30) self.rbtn.setFixedSize(180, 50) self.hbox25 = QHBoxLayout() self.hbox25.addStretch(1) self.hbox25.addWidget(self.rbtn) self.hbox25.addStretch(1) self.vbox2 = QVBoxLayout() self.vbox2.addLayout(self.hbox21) self.vbox2.addLayout(self.hbox22) self.vbox2.addLayout(self.hbox23) self.vbox2.addLayout(self.hbox24) self.vbox2.addLayout(self.hbox25) self.hbox = QHBoxLayout() self.hbox.addLayout(self.vbox1) self.hbox.addLayout(self.vbox2) self.setLayout(self.hbox) self.type = self.typeedit.text() self.rbtn.clicked.connect(self.rbtnClicked) def openimage(self): self.filePath, imgType = QFileDialog.getOpenFileName( self, "打开本地图片", "", "*.jpg;;*.png;;All Files(*)") self.jpg = QPixmap(self.filePath).scaled(self.plabel.width(), self.plabel.height()) self.plabel.setPixmap(self.jpg) def rbtnClicked(self): self.type = self.typeedit.text() self.froml = self.fromledit.text() self.fromt = self.fromtedit.text() self.stayl = self.stayledit.text() self.petid = 'p' + str(time.strftime("%g%m%d")) + str( random.randint(0, 9999)).zfill(4) db = QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName('./db/myPet.db') db.open() query = QSqlQuery() sql = "select * from user where UserId = '%s' and UserAuthority = '黑名单'" % ( self.UserId) query.exec_(sql) if (query.next()): print( QMessageBox.warning(self, "警告", "你是黑名单用户,无法发布宠物!", QMessageBox.Yes, QMessageBox.Yes)) return if (self.type == "" or self.filePath == "" or self.froml == "" or self.froml == "" or self.fromt == ""): print( QMessageBox.warning(self, "警告", "图片未插入或信息不完整!", QMessageBox.Yes, QMessageBox.Yes)) return sql = "select * from pet where PetId = '%s'" % (self.petid) query.exec_(sql) if (query.next()): # 宠物编号已存在 print( QMessageBox.warning(self, "警告", "系统错误,请重新提交", QMessageBox.Yes, QMessageBox.Yes)) return else: sql = "insert into pet values ('%s','待领养','%s','%s')" % ( self.petid, self.UserId, self.filePath) query.exec_(sql) db.commit() sql = "insert into pet_detail values ('%s','%s','%s','%s','%s')" % ( self.petid, self.type, self.froml, self.fromt, self.stayl) query.exec_(sql) db.commit() db.close() print( QMessageBox.information(self, "提醒", "您已成功发布领养信息!", QMessageBox.Yes, QMessageBox.Yes)) self.stayledit.setText("") self.typeedit.setText("") self.fromledit.setText("") self.filePath = "" self.jpg = QPixmap(self.filePath).scaled(self.plabel.width(), self.plabel.height()) self.plabel.setPixmap(self.jpg)
def add_node(): #add node dialog addNodeDialog = QDialog() addNodeDialog.ok = False addNodeDialog.node_name = "" addNodeDialog.node_label = "" addNodeDialog.node_timestamp = "" addNodeDialog.node_description = "" addNodeDialog.node_logEntryReference = "" addNodeDialog.node_logCreator = "" addNodeDialog.node_logEntrySource = "" addNodeDialog.node_type = "None" # Layouts main_layout = QVBoxLayout() addNodeLayout = QFormLayout() buttons_layout = QHBoxLayout() main_layout.addLayout(addNodeLayout) main_layout.addLayout(buttons_layout) addNodeDialog.setLayout(main_layout) #line edits leNodeName = QLineEdit() leNodeLabel = QLineEdit() teNodeDescription = QTextEdit() dtNodeTimestamp = QDateTimeEdit() dtNodeTimestamp.setDate(QtCore.QDate(2020, 1, 1)) dtNodeTimestamp.setCalendarPopup(True) leLogEntryReference = QLineEdit() cbxLogCreator = QComboBox() leLogEntrySource = QLineEdit() cbxNodeType = QComboBox() cbxImage = QComboBox() #buttons pbOK = QPushButton() pbCancel = QPushButton() cbxNodeType.addItems(["None", "circle", "box"]) cbxLogCreator.addItems(["None", "Red", "Blue", "White"]) cbxImage.addItem("None") self.iconList = Configuration.get_list_of_icon_dicts( self.configuration) for icon in self.iconList: cbxImage.addItem(icon["name"]) pbOK.setText("&OK") pbCancel.setText("&Cancel") addNodeLayout.setWidget(0, QFormLayout.LabelRole, QLabel("Node Name")) addNodeLayout.setWidget(0, QFormLayout.FieldRole, leNodeName) addNodeLayout.setWidget(1, QFormLayout.LabelRole, QLabel("Node Description")) addNodeLayout.setWidget(1, QFormLayout.FieldRole, teNodeDescription) addNodeLayout.setWidget(2, QFormLayout.LabelRole, QLabel("Node Timestamp")) addNodeLayout.setWidget(2, QFormLayout.FieldRole, dtNodeTimestamp) addNodeLayout.setWidget(3, QFormLayout.LabelRole, QLabel("Log Entry Reference")) addNodeLayout.setWidget(3, QFormLayout.FieldRole, leLogEntryReference) addNodeLayout.setWidget(4, QFormLayout.LabelRole, QLabel("Log Creator")) addNodeLayout.setWidget(4, QFormLayout.FieldRole, cbxLogCreator) addNodeLayout.setWidget(5, QFormLayout.LabelRole, QLabel("Log Entry Source")) addNodeLayout.setWidget(5, QFormLayout.FieldRole, leLogEntrySource) addNodeLayout.setWidget(6, QFormLayout.LabelRole, QLabel("Node Type")) addNodeLayout.setWidget(6, QFormLayout.FieldRole, cbxNodeType) addNodeLayout.setWidget(7, QFormLayout.LabelRole, QLabel("Node Image")) addNodeLayout.setWidget(7, QFormLayout.FieldRole, cbxImage) #ok button handler def ok(): addNodeDialog.OK = True addNodeDialog.node_name = leNodeName.text() addNodeDialog.node_label = leNodeName.text() addNodeDialog.node_timestamp = dtNodeTimestamp.text() addNodeDialog.node_description = teNodeDescription.toPlainText( ) addNodeDialog.node_logEntryReference = leLogEntryReference.text( ) addNodeDialog.node_logCreator = cbxLogCreator.currentText() addNodeDialog.node_logEntrySource = leLogEntrySource.text() if (cbxImage.currentText()): for icon in self.iconList: if (cbxImage.currentText() == icon["name"]): addNodeDialog.node_type = icon["source"] else: addNodeDialog.node_type = cbxNodeType.currentText() addNodeDialog.close() #cancel button handler def cancel(): addNodeDialog.OK = False addNodeDialog.close() pbOK.clicked.connect(ok) pbOK.clicked.connect(lambda: self.addNewNode( self.tableWidgetNodes, str(self.nodeId), leNodeName.text(), dtNodeTimestamp.text(), teNodeDescription.toPlainText(), leLogEntryReference.text(), cbxLogCreator.currentText(), addNodeDialog.node_type, leLogEntrySource.text())) pbCancel.clicked.connect(cancel) buttons_layout.addWidget(pbOK) buttons_layout.addWidget(pbCancel) addNodeDialog.exec_() if addNodeDialog.OK and addNodeDialog.node_name != '': self.qgv.addNode( self.qgv.engine.graph, addNodeDialog.node_name, id=str(self.nodeId), label=addNodeDialog.node_label, description=addNodeDialog.node_description, timestamp=addNodeDialog.node_timestamp, leReference=addNodeDialog.node_logEntryReference, creator=addNodeDialog.node_logCreator, leSource=addNodeDialog.node_logEntrySource, shape=addNodeDialog.node_type) self.qgv.build() self.nodeId += 1
class ShowInfoWidget(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(1050, 650) self.gridLayoutWidget = QtWidgets.QWidget(Form) self.gridLayoutWidget.setGeometry(QtCore.QRect(29, 9, 1000, 600)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") #网格布局 self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setHorizontalSpacing(20) self.gridLayout.setObjectName("gridLayout") # 日期选择框 self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self.gridLayoutWidget) self.dateEdit.setObjectName("dateEdit") self.dateEdit.setDisplayFormat("yyyy-MM-dd") self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365)) self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365 * 3)) self.dateEdit.setCalendarPopup(True) self.gridLayout.addWidget(self.dateEdit, 1, 0, 1, 1) #下拉列表 self.comboBox = QtWidgets.QComboBox(self.gridLayoutWidget) self.comboBox.setObjectName("comboBox") num = self.getLogsItems() self.comboBox.setMaxVisibleItems(num) self.gridLayout.addWidget(self.comboBox, 2, 0, 1, 1) #日志显示框 self.textEdit = QtWidgets.QTextEdit(self.gridLayoutWidget) self.textEdit.setObjectName("textEdit") self.gridLayout.addWidget(self.textEdit, 3, 0, 1, 1) self.textEdit.setReadOnly(True) #按钮 self.pushButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton.setObjectName("pushButton") self.gridLayout.addWidget(self.pushButton, 2, 1, 1, 1) self.bindButton() self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "系统日志查询")) self.pushButton.setText(_translate("Form", "显示日志")) def bindButton(self): self.pushButton.clicked.connect(lambda: self.showFileButtonClicked()) self.dateEdit.dateTimeChanged.connect(lambda: self.getLogsItems()) #显示日志按钮点击事件 def showFileButtonClicked(self): self.textEdit.clear() path = os.path.abspath(os.getcwd()) filename = self.comboBox.currentText() if not filename: self.textEdit.append("这一天没有产生日志") return filepath = path + "/logs/" + filename try: with open(filepath, "r", encoding='utf-8') as f: count = 1 data = f.readline() while data: if data: datalist = data.split("-", 4) self.textEdit.append("第" + str(count) + "条日志:" + datalist[1] + "/" + datalist[2] + datalist[4]) count = count + 1 data = f.readline() else: self.textEdit.append(filename + "文件为空") except FileNotFoundError: self.textEdit.append("找不到" + filename + "文件") #获取要显示在下拉框中的日志文件名 def getLogsItems(self): path = str(os.path.abspath(os.getcwd())) + "/logs" data = self.getChoisedTimeInfoFileData() for root, dirs, files in os.walk(path): self.comboBox.clear() for i in files: fileNameList = i.split("-") filename = fileNameList[0] + "-" + fileNameList[ 1] + "-" + fileNameList[2] if filename == data: self.comboBox.addItem(i) return len(files) #获取当前选择的日期的文件日期 def getChoisedTimeInfoFileData(self): date = self.dateEdit.text() return str(date)
class TableSheet(QWidget): def __init__(self): super().__init__() self.initUi() def initUi(self): #self.setWindowFlags(Qt.WindowCloseButtonHint && Qt.WindowMinimizeButtonHint) #self.setWindowFlags(Qt.WindowMinimizeButtonHint) self.setWindowTitle('火车票查询系统') #self.setGeometry(40,80,1500,720) #第一部分,输入出发地、目的地和日期 controlsLayout = QGridLayout() #栅格布局 self.label1 = QLabel("出发地:") self.Editlabel1 = QLineEdit() self.label2 = QLabel("目的地:") self.Editlabel2 = QLineEdit() self.label3 = QLabel("乘车日期:") self.Editlabel3 = QDateTimeEdit() now = QDateTime.currentDateTime() #print(now) self.Editlabel3.setDateTime(now) self.Editlabel3.setDisplayFormat("yyyy-MM-dd") #小写m为分钟 self.Editlabel3.setCalendarPopup(True) self.buttonOK = QPushButton("确定") controlsLayout.addWidget(QLabel(""), 0, 0, 1, 6) self.message = QLabel("暂未查询车次信息!") controlsLayout.addWidget(self.message, 0, 7, 1, 4) controlsLayout.addWidget(self.label1, 0, 11, 1, 1) controlsLayout.addWidget(self.Editlabel1, 0, 12, 1, 2) controlsLayout.addWidget(QLabel(" "), 0, 14, 1, 1) controlsLayout.addWidget(self.label2, 0, 15, 1, 1) controlsLayout.addWidget(self.Editlabel2, 0, 16, 1, 2) controlsLayout.addWidget(QLabel(" "), 0, 18, 1, 1) controlsLayout.addWidget(self.label3, 0, 19, 1, 1) controlsLayout.addWidget(self.Editlabel3, 0, 20, 1, 2) controlsLayout.addWidget(QLabel(" "), 0, 22, 1, 1) controlsLayout.addWidget(self.buttonOK, 0, 23, 1, 1) controlsLayout.addWidget(QLabel(" "), 0, 25, 1, 8) #第二部分,显示查询到的车次信息 horizontalHeader = [ "车次", "车站", "时间", "历时", "商务座", "一等座", "二等座", "高级软卧", "软卧", "动卧", "硬卧", "软座", "硬座", "无座", "其他" ] self.table = QTableWidget() self.table.setColumnCount(15) self.table.setRowCount(0) #初始化为0行 self.table.setHorizontalHeaderLabels(horizontalHeader) self.table.setEditTriggers(QTableWidget.NoEditTriggers) #不能编辑 self.table.setSelectionBehavior(QTableWidget.SelectRows) #选中整行 self.table.setSelectionMode(QTableWidget.SingleSelection) for index in range(self.table.columnCount()): headItem = self.table.horizontalHeaderItem(index) headItem.setFont(QFont("song", 12, QFont.Bold)) headItem.setForeground(QBrush(Qt.gray)) headItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) #self.table.setFrameShape(QFrame.HLine)#设定样式 #self.table.setShowGrid(False) #取消网格线 #self.table.verticalHeader().setVisible(False) #隐藏垂直表头 #row_count = self.table.rowCount() #self.table.setColumnWidth(0,200) mainLayout = QHBoxLayout() mainLayout.addWidget(self.table) layout = QVBoxLayout() layout.addLayout(controlsLayout) layout.addLayout(mainLayout) self.setLayout(layout) self.buttonOK.clicked.connect(self.showMessage) self.showMaximized() def closeEvent(self, event): #关闭时弹窗提示 reply = QMessageBox.question(self, '警告', '查询记录不会被保存,\n确认退出?', QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() def showMessage(self): #显示查询信息 stations_fz = dict(map(lambda t: (t[1], t[0]), stations.items())) #反转字典 from_s = self.Editlabel1.text() #获取文本框内容 to_s = self.Editlabel2.text() if (from_s in stations.keys()) and (to_s in stations.keys()): f = stations[from_s] # 通过字典转化为车站对应的缩写字母 t = stations[to_s] # 通过字典转化为车站对应的缩写字母 date = self.Editlabel3.text() d = str(date) # print(d) # print('正在查询' + from_s + '至' + to_s + '的列车...') url = 'https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date=' + d + '&leftTicketDTO.from_station=' + f + '&leftTicketDTO.to_station=' + t + '&purpose_codes=ADULT' # print(url) warnings.filterwarnings("ignore") # 这个网站是有安全警告的,这段代码可以忽略警告 r = requests.get(url, verify=False) raw_trains = r.json()['data']['result'] # 获取车次信息 # print(raw_trains) num = len(raw_trains) # 获取车次数目 # print('共查询到%d个车次信息'%num) self.message.setText("共查询到%d个车次信息" % num) if raw_trains == []: QMessageBox.warning(self, "提示", "暂无所查询的车次信息!") i = 0 self.table.setRowCount(num) self.table.setHorizontalScrollBarPolicy( Qt.ScrollBarAlwaysOff) #关闭水平滚动条 for raw_train in raw_trains: # split分割之后得到的是一个列表 data_list = raw_train.split("|") # print(data_list) tra_no = data_list[2] #train_no from_s_no = data_list[16] #from_station_no to_s_no = data_list[17] #to_station_no seat_type = data_list[35] #seat_types tra_date = d #train_date checi = data_list[3] # 车次 cfd = stations_fz[data_list[6]] #出发地,通过字典转换 mdd = stations_fz[data_list[7]] #目的地 fctime = data_list[8] # 发车时间 ddtime = data_list[9] # 到达时间 lishi = data_list[10] # 历时 shangwuzuo = data_list[32] or "--" # 商务座/特等座 yidengzuo = data_list[31] or "--" # 一等座 erdengzuo = data_list[30] or "--" # 二等座 gjruanwo = data_list[21] or "--" # 高级软卧 ruanwo = data_list[23] or "--" # 软卧 dongwo = data_list[33] or "--" # 动卧 yingwo = data_list[28] or "--" # 硬卧 ruanzuo = data_list[24] or "--" # 软座 yingzuo = data_list[29] or "--" # 硬座 wuzuo = data_list[26] or "--" # 无座 others = data_list[22] or "--" # 其他 price_url = "https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=" + tra_no + "&from_station_no=" + from_s_no + "&to_station_no=" + to_s_no + "&seat_types=" + seat_type + "&train_date=" + tra_date r1 = requests.get(price_url, verify=False) # print(price_url) raw_prices = r1.json()['data'] # 获取车次信息 if 'A1' in raw_prices.keys(): #A1:硬座 pr_yz = raw_prices['A1'] else: pr_yz = '' if 'A2' in raw_prices.keys(): # A2:软座 pr_rz = raw_prices['A2'] else: pr_rz = '' if 'A3' in raw_prices.keys(): # A3:硬卧 pr_yw = raw_prices['A3'] else: pr_yw = '' if 'A4' in raw_prices.keys(): # A4:软卧 pr_rw = raw_prices['A4'] else: pr_rw = '' if 'A6' in raw_prices.keys(): # A6:高级软卧 pr_gjrw = raw_prices['A6'] else: pr_gjrw = '' if 'A9' in raw_prices.keys(): # A9:商务座,特等座 pr_swz = raw_prices['A9'] else: pr_swz = '' if 'WZ' in raw_prices.keys(): # WZ:无座 pr_wz = raw_prices['WZ'] else: pr_wz = '' if 'M' in raw_prices.keys(): # M:一等座 pr_ydz = raw_prices['M'] else: pr_ydz = '' if 'O' in raw_prices.keys(): # O:二等座 pr_edz = raw_prices['O'] else: pr_edz = '' if 'F' in raw_prices.keys(): # F:动卧 pr_dw = raw_prices['F'] else: pr_dw = '' # print(pr_yz,pr_rz,pr_yw,pr_rw,pr_gjrw,pr_swz,pr_wz,pr_ydz,pr_edz,pr_dw) NewItem = QTableWidgetItem(checi) NewItem.setForeground(QColor(Qt.red)) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) #垂直居中 self.table.setItem(i, 0, NewItem) NewItem = QTableWidgetItem(cfd + '\n-\n' + mdd) NewItem.setFont(QFont("song", 9, QFont.Bold)) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 1, NewItem) NewItem = QTableWidgetItem(fctime + '\n-\n' + ddtime) NewItem.setFont(QFont("song", 9, QFont.Bold)) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 2, NewItem) NewItem = QTableWidgetItem(lishi) NewItem.setFont(QFont("song", 9, QFont.Bold)) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 3, NewItem) NewItem = QTableWidgetItem(shangwuzuo + '\n' + pr_swz) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 4, NewItem) NewItem = QTableWidgetItem(yidengzuo + '\n' + pr_ydz) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 5, NewItem) NewItem = QTableWidgetItem(erdengzuo + '\n' + pr_edz) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 6, NewItem) NewItem = QTableWidgetItem(gjruanwo + '\n' + pr_gjrw) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 7, NewItem) NewItem = QTableWidgetItem(ruanwo + '\n' + pr_rw) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 8, NewItem) NewItem = QTableWidgetItem(dongwo + '\n' + pr_dw) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 9, NewItem) NewItem = QTableWidgetItem(yingwo + '\n' + pr_yw) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 10, NewItem) NewItem = QTableWidgetItem(ruanzuo + '\n' + pr_rz) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 11, NewItem) NewItem = QTableWidgetItem(yingzuo + '\n' + pr_yz) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 12, NewItem) NewItem = QTableWidgetItem(wuzuo + '\n' + pr_wz) NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 13, NewItem) NewItem = QTableWidgetItem(others + '\n' + '') NewItem.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) self.table.setItem(i, 14, NewItem) self.table.setRowHeight(i, 60) #设置行高 i = i + 1 #self.table.setSpan(0, 8, 2, 1) #合并单元格 else: if from_s not in stations.keys(): # print('请输入正确的出发地') QMessageBox.warning(self, "提示", "请输入正确的出发地!") if to_s not in stations.keys(): # print('请输入正确的目的地') QMessageBox.warning(self, "提示", "请输入正确的目的地!")
class Ui_Dialog(QWidget): def setupUi(self, Dialog): """ 窗体UI控件部分 :param Dialog: 主窗体 :return: None """ Dialog.setObjectName("Dialog") Dialog.resize(1200, 950) Dialog.setWindowOpacity(0.95) # 设置 self.tabWidget = QtWidgets.QTabWidget(Dialog) self.tabWidget.setGeometry(QtCore.QRect(0, 0, 1200, 950)) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab1") self.tabWidget.setCurrentIndex(1) # self.tabWidget.showNormal() self.tab2 = QtWidgets.QWidget() self.tab2.setObjectName("tab2") self.tabWidget.addTab(self.tab, "") self.tabWidget.addTab(self.tab2, "") self.tabWidget.setDocumentMode(True) self.setAcceptDrops(True) self.cwd = os.getcwd() self.index = '' self.y_outer = QtWidgets.QRadioButton(self.tab) self.y_outer.setGeometry(QtCore.QRect(200, 270, 89, 16)) self.y_outer.setObjectName("y_outer") self.y_inner = QtWidgets.QRadioButton(self.tab) self.y_inner.setGeometry(QtCore.QRect(200, 300, 89, 16)) self.y_inner.setObjectName("y_inner") self.x_left = QtWidgets.QRadioButton(self.tab) self.x_left.setGeometry(QtCore.QRect(200, 560, 89, 16)) self.x_left.setObjectName("x_left") self.x_inner = QtWidgets.QRadioButton(self.tab) self.x_inner.setGeometry(QtCore.QRect(200, 530, 89, 16)) self.x_inner.setObjectName("x_inner") self.x_outer = QtWidgets.QRadioButton(self.tab) self.x_outer.setGeometry(QtCore.QRect(200, 490, 89, 16)) self.x_outer.setObjectName("x_outer") # self.x_right = QtWidgets.QRadioButton(self.tab) self.x_right.setGeometry(QtCore.QRect(200, 590, 89, 16)) self.x_right.setObjectName("x_right") self.y_text = QtWidgets.QTextBrowser(self.tab) self.y_text.setGeometry(QtCore.QRect(330, 200, 711, 161)) self.y_text.setObjectName("y_text") self.down_left_text = QtWidgets.QTextBrowser(self.tab) self.down_left_text.setGeometry(QtCore.QRect(330, 460, 330, 171)) self.down_left_text.setObjectName("down_left_text") self.down_right_text = QtWidgets.QTextBrowser(self.tab) self.down_right_text.setGeometry(QtCore.QRect(710, 460, 330, 171)) self.down_right_text.setObjectName("down_right_text") self.y_jions = QtWidgets.QPushButton(self.tab) self.y_jions.setGeometry(QtCore.QRect(40, 270, 130, 40)) self.y_jions.setObjectName("y_jions") self.x_jions = QtWidgets.QPushButton(self.tab) self.x_jions.setGeometry(QtCore.QRect(40, 530, 130, 40)) self.x_jions.setObjectName("x_jions") self.files_up = QtWidgets.QPushButton(self.tab) self.files_up.setGeometry(QtCore.QRect(560, 140, 160, 40)) self.files_up.setObjectName("files_up") self.files_down_left = QtWidgets.QPushButton(self.tab) self.files_down_left.setGeometry(QtCore.QRect(460, 400, 130, 40)) self.files_down_left.setObjectName("files_down") self.files_down_right = QtWidgets.QPushButton(self.tab) self.files_down_right.setGeometry(QtCore.QRect(800, 400, 130, 40)) self.files_down_right.setObjectName("files_down") self.bg1 = QButtonGroup() self.bg1.addButton(self.y_outer, 11) self.bg1.addButton(self.y_inner, 21) # self.bg2 = QButtonGroup() self.bg2.addButton(self.x_inner, 11) self.bg2.addButton(self.x_left, 21) self.bg2.addButton(self.x_outer, 31) self.bg2.addButton(self.x_right, 41) self.msgBox = QMessageBox() self.files_up.clicked.connect(lambda: self.btn_chose_files(1)) self.files_down_left.clicked.connect(lambda: self.btn_chose_files(2)) self.files_down_right.clicked.connect(lambda: self.btn_chose_files(3)) # 时间模块 self.texttime = QtWidgets.QLCDNumber(self.tab) self.texttime.setGeometry(QtCore.QRect(0, 0, 500, 30)) self.texttime.setMouseTracking(False) self.texttime.setDigitCount(19) self.texttime.setMode(QLCDNumber.Dec) self.texttime.setSegmentStyle(QLCDNumber.Flat) self.texttime.setObjectName("texttime") # pdf转换模块 self.pdf = QtWidgets.QPushButton(self.tab2) self.pdf.setObjectName("btn_chooseMutiFile") self.pdf.setText("pdf-->word") self.pdf.setGeometry(QtCore.QRect(50, 100, 200, 40)) self.pdf_show = QtWidgets.QTextBrowser(self.tab2) self.pdf_show.setGeometry(QtCore.QRect(330, 40, 600, 300)) self.pdf_show.setObjectName("y_text") # 窗体最小化部分 self.winIconPix = QPixmap(16, 16) self.setWindowIcon(QIcon('mg.ico')) self.tray = QSystemTrayIcon(Dialog) self.trayIconPix = QPixmap(16, 16) self.tray.setIcon(QIcon('mg.ico')) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): """ 窗体属性/样式/函数部分 :param Dialog: 主窗体 :return: None """ _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "tools")) Dialog.setWindowIcon(QIcon('mg.ico')) # 属性部分 self.y_outer.setText(_translate("Dialog", "竖向")) self.y_inner.setText(_translate("Dialog", "横向")) self.y_jions.setText(_translate("Dialog", "全连接")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "合并文件")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab2), _translate("Dialog", "pdf转换为word")) self.x_left.setText(_translate("Dialog", "左连接")) self.x_inner.setText(_translate("Dialog", "交集")) self.x_outer.setText(_translate("Dialog", "全集")) self.x_right.setText(_translate("Dialog", "右连接")) self.x_jions.setText(_translate("Dialog", "横向合并")) self.files_up.setText(_translate("Dialog", "文件1")) self.files_down_left.setText(_translate("Dialog", "左表文件")) self.files_down_right.setText(_translate("Dialog", "右表文件")) # 槽函数部分 self.y_jions.clicked.connect(lambda: Dialog.yunxing(1, )) self.x_jions.clicked.connect(lambda: Dialog.yunxing(2, )) self.pdf.clicked.connect(self.run_pdf_parse) self.bg1.buttonClicked.connect(self.chose_types) self.bg2.buttonClicked.connect(self.chose_types) ######################################################################################################## # 样式部分 self.y_jions.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.x_jions.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.files_down_left.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.files_down_right.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.files_up.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.tab.setStyleSheet("#tab1{background-color:#012456;}") self.tab2.setStyleSheet("#tab2{background-color:#012456;}") self.tabWidget.setStyleSheet( "QTabBar{background-color:#333300;outline:solid 2px;}QTabBar::tab{border-bottom-color:#C2C7CB;min-width: " "150px;border-right:2px solid black;border-style: outset;min-height: 40px;" "color:white;background-color:#4169E1;}QTabBar::tab:selected{background-color: white;" "color:green;border-top-right-radius:10px;border-top-left-radius:10px;border:none}QTabBar::tab:first{margin-left:10px;}" "QTabBar::tab:hover:!selected{color:red;background-color:black;}") self.down_right_text.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:#FFF5EE;" ) self.down_left_text.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:#FFF5EE;" ) self.y_text.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:#FFF5EE;" ) self.pdf_show.setStyleSheet( "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:#FFF5EE;" ) self.x_inner.setStyleSheet("color:white") self.x_left.setStyleSheet("color:white") self.x_right.setStyleSheet("color:white") self.x_outer.setStyleSheet("color:white") self.y_inner.setStyleSheet("color:white") self.y_outer.setStyleSheet("color:white") self.pdf.setStyleSheet( 'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}' ) self.texttime.setStyleSheet( 'font: italic 1px \"楷体\";border-width:0;border-style:outset;color:#DC143C;font-size:1px;' ) ################################################## # 计时器模块 # # # ################################################## self.timer = QTimer() self.timer.setInterval(1000) self.timer.timeout.connect(self.showtime) self.timer.start() # 选择文件模块 def btn_chose_files(self, id): """ :param id: 可视化文件路径名/(1:代表最上面文本,2:下面左边模块,3:下面右边模块) :return:None """ files, filetype = QFileDialog.getOpenFileNames( self, "选择文件", self.cwd, # 起始路径' "Excle (*.xlsx);;") for file in files: # 对于链接方式的参数配置 if id == 1: self.y_text.append(file) ALL_FILES.append(file) elif id == 2: self.down_left_text.append(file) LEFT_FILES.append(file) global header header, okPressed = QInputDialog.getText( self, "字段名选择", "字段名所在行", QLineEdit.Normal, "1") print(header) try: header = int(header) except: header = 1 if okPressed and header != '': cols = cols_name(LEFT_FILES[0], int(header)) global left_indexs left_indexs = self.getChoice(cols) elif id == 3: self.down_right_text.append(file) RIGHT_FILES.append(files[0]) def getChoice(self, cols): # Get item/choice """ 选择合并文件的共有字段名 :param cols: ALL字段名 :return: 选中的字段名 """ cols = [str(x) for x in cols] # item, okPressed = QInputDialog.getItem(self, "选择连接轴", "字段", cols, 4, True)#单选复选框,后面功能需要用到 item, okPressed = QInputDialog.getMultiLineText( self, "删除不需要的字段", "字段名", "\n".join(cols)) if okPressed and item: item = item.split() return item def chose_types(self): """ 选择模式模块 :return: 选择模式。eg:横向-全集 """ sender = self.sender() global BTN_ID global To_A global AXIS_TO if sender == self.bg1: To_A = 0 if self.bg1.checkedId() == 11: BTN_ID = 'outer' AXIS_TO = 1 elif self.bg1.checkedId() == 21: AXIS_TO = 0 BTN_ID = 'inner' if sender == self.bg2: To_A = 1 if self.bg2.checkedId() == 11: BTN_ID = 'inner' elif self.bg2.checkedId() == 21: BTN_ID = 'left' elif self.bg2.checkedId() == 31: BTN_ID = 'outer' # self.getChoice() elif self.bg2.checkedId() == 41: BTN_ID = 'right' def showtime(self): """ 显示时间模块 :return: None """ self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self) self.dateEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss') test = self.dateEdit.text() # self.texttime.setText(test) self.texttime.display(test) self.texttime.setStyleSheet( 'font: italic 1px \"宋体\";border-width:0;border-style:outset;color:#DC143C;font-size:1px;' ) def run_pdf_parse(self): """ pdf转换模块(后期优化,放进子进程模块) :return: 同文件名word版本.eg:文件.pdf --- 文件.doc """ self.pdf_show.clear() files, filetype = QFileDialog.getOpenFileNames(self, "选择文件", self.cwd, "PDF Files (*.pdf);;") if len(files) == 0: return space = " " for file in files: texts = parser_pdfs(file) (filepath, tempfilename) = os.path.split(file) for text in texts: self.pdf_show.append("<font color='red' >" + "处理对象:" + tempfilename + "</font>" + "<br />" + "%s页面数:" % space + str(text[0]) + "<br />" + "%s图片数:" % space + str(text[1]) + "<br />" + "%s曲线数:" % space + str(text[2]) + "<br />" + "%s水平文本框:" % space + str(text[3]) + "<br />" + "<font color='red' >" + "-" * 40 + "</font>")
class MyWindow(QMainWindow): def __init__(self, commodity): super().__init__() self.commodityData = commodity self.kucundandata = KuCunDan(commodity) self.yingye = YingYeEData.YingYeE(commodity) self.initUI() self.show() def Show(self): if self.commodityData.model.tableName() != "yingyee": self.commodityData.model.setTable("yingyee") self.commodityData.model.select() self.yingye.show() def ShowNotPayCustomer(self): """ 点击listwidget的item时被调用 显示未付款用户 :return: """ select = self.listwidget.currentItem().text().split() kehu = self.kucundandata.Find("name", select[0], "==") if kehu: alldata = self.kucundandata.getData("date", select[1] + " " + select[2], "==") self.FillTable(alldata[0]) def FillTable(self, data): """ 此函数用于将数据库中的未付款客户数据展示在界面上,被ShowNotPayCustomer调用 :param data: :return: """ a = data[0].split() self.dateedit.setText(a[0]) self.customer.setText(data[1]) self.danjubianhao.setText(data[2]) self.chuhuocangku.setText(data[3]) self.customertel.setText(data[4]) self.address.setText(data[5]) for i in range(6, 11): self.beizhulineedits[i - 6].setText(data[i]) index = 11 for i in range(10): if data[(index - 11) % 8 == 0] != "": for j in range(8): self.lineedits[i][j].setText(data[index]) index += 1 else: break def LineEditsEditAble(self, Bool): """ 设置表格是否可以编辑,在查看未付款用户下不可编辑,打开或关闭都会清空单据 :param Bool: :return: """ self.dateedit.setReadOnly(Bool) self.customer.setReadOnly(Bool) self.danjubianhao.setReadOnly(Bool) self.chuhuocangku.setReadOnly(Bool) self.customertel.setReadOnly(Bool) self.address.setReadOnly(Bool) for i in range(6, 11): self.beizhulineedits[i - 6].setReadOnly(Bool) for i in range(10): for j in range(8): self.lineedits[i][j].setReadOnly(Bool) self.dateedit.setText("") self.customer.setText("") self.danjubianhao.setText("") self.chuhuocangku.setText("") self.customertel.setText("") self.address.setText("") for i in range(6, 11): self.beizhulineedits[i - 6].setText("") for i in range(10): for j in range(8): self.lineedits[i][j].setText("") def getcheckrange(self): """ 获得查找未付款客户的范围 :return: """ self.datetimemax = QDateTimeEdit(QDateTime.currentDateTime(), self) # 3 self.datetimemax.dateTimeChanged.connect( lambda: print(self.datetimemax.text())) self.datetimemax.setCalendarPopup(True) self.datetimemin = QDateTimeEdit(QDateTime.currentDateTime(), self) # 3 self.datetimemin.dateTimeChanged.connect( lambda: print(self.datetimemin.text())) self.datetimemin.setCalendarPopup(True) #self.datetimemin.setReadOnly(True) #self.datetimemax.setReadOnly(True) groupbox = QGroupBox("查看模式选择", self.listframe) min = QLabel("起始日期:") max = QLabel("终止日期:") kehulabel = QLabel("客户名称:") hlayout1 = QHBoxLayout() hlayout2 = QHBoxLayout() hlayout1.addStretch(1) hlayout2.addStretch(1) hlayout1.addWidget(min) hlayout1.addWidget(self.datetimemin) hlayout2.addWidget(max) hlayout2.addWidget(self.datetimemax) hlayout3 = QHBoxLayout() hlayout3.addStretch(1) hlayout3.addWidget(kehulabel) self.kehucheckbox = QCheckBox("按客户查找") self.datecheckbox = QCheckBox("按日期查找") self.findcustomer = QLineEdit("") hlayout3.addWidget(self.findcustomer) #self.findcustomer.setReadOnly(True) #self.finddate = QLineEdit() vlayout = QVBoxLayout() vlayout.addStretch(1) vlayout.addWidget(self.kehucheckbox) vlayout.addLayout(hlayout3) vlayout.addWidget(self.datecheckbox) vlayout.addLayout(hlayout1) vlayout.addLayout(hlayout2) groupbox.setLayout(vlayout) self.findbutton = QPushButton(groupbox) self.findbutton.setGeometry(200, 15, 35, 35) self.findbutton.setIcon(QIcon("find.jpg")) #self.findbutton.setStyleSheet("border-width:30px") #self.findbutton.autoFillBackground() self.findbutton.setToolTip("查找") self.findbutton.clicked.connect(self.ChooseFindWay) def ChooseFindWay(self): if self.kehucheckbox.isChecked() and not self.datecheckbox.isChecked(): if self.findcustomer.text() != "": self.listwidget.clear() print("1") self.AddListItem( self.kucundandata.getData("name", self.findcustomer.text(), "==")) print("哈哈哈哈哈哈哈哈") elif self.kehucheckbox.isChecked() and self.datecheckbox.isChecked(): dataname = self.kucundandata.getData("name", self.findcustomer.text(), "==") adddata = [] if dataname == None: QMessageBox.information(self, "注意", "未发现该客户") return min = (self.datetimemin.text().split())[0] max = (self.datetimemax.text().split())[0] if min > max: QMessageBox.warning(self, "错误提示", "请输入正确的时间范围") return else: min += " 00:00:00" max += " 23:59:59" data1 = self.kucundandata.getData("date", min, ">=") data2 = self.kucundandata.getData("date", max, "<=") if data1 != None and data2 != None: for data in data1: if data in data2: if data in dataname: adddata.append(data) self.listwidget.clear() self.AddListItem(adddata) elif self.datecheckbox.isChecked( ) and not self.kehucheckbox.isChecked(): min = (self.datetimemin.text().split())[0] max = (self.datetimemax.text().split())[0] if min > max: QMessageBox.warning(self, "错误提示", "请输入正确的时间范围") return else: min += " 00:00:00" max += " 23:59:59" data1 = self.kucundandata.getData("date", min, ">=") data2 = self.kucundandata.getData("date", max, "<=") self.listwidget.clear() if data1 != None and data2 != None: data3 = [] for data in data1: if data in data2: data3.append(data) print("-----", data3) if len(data3) != 0: self.AddListItem(data3) else: year = datetime.date.today().year + 1 self.AddListItem(self.kucundandata.getData('date', str(year), "<=")) QMessageBox.information(self, "提示", "请勾选查询方式") def deletecustomer(self): """ 删除未付款客户,此处还需要将此客户从数据库中删除,并将未付款状态修改成已付款状态 :return: """ result = QMessageBox.information(self, "提示", "确定删除此未付客户?", QMessageBox.Yes | QMessageBox.No) if result == QMessageBox.Yes: date = self.listwidget.currentItem().text().split() target = date[1] + " " + date[2] self.kucundandata.RemoveData("date", target, "==") self.yingye.ReviseStatus(target, "已付款") self.listwidget.takeItem(self.listwidget.currentIndex().row()) def AddListItem(self, data): """ :param data: data 是数据库中getData获得的数据,是一个二位列表 :return: """ if data == None: QMessageBox.information(self, "查找结果", "未发现该客户") return print(data) print("AddListItem") self.listwidget.clear() listdata = [ data[i][1] + " " + data[i][0] for i in range(0, len(data)) ] self.listwidget.addItems(listdata) def initUI(self): self.setGeometry(200, 200, 1000, 800) self.setStyleSheet("background-color:rgb(255,255,255,255)") self.setWindowIcon(QIcon("n.jpg")) self.setWindowTitle("库存单") self.listframe = QFrame(self) self.listwidget = QListWidget(self.listframe) self.listwidget.setGeometry(0, 175, 300, 455) #self.listwidget.addItems(["黄小泽 2018/11/25 16:32:04","小黄 2018-10-30","小泽 2018-9-31"]) self.listframe.setVisible(False) self.listframe.setGeometry(950, 0, 300, 800) #self.listframe.setStyleSheet("background-color:blue") self.listwidget.itemClicked.connect(self.ShowNotPayCustomer) self.listwidget.itemDoubleClicked.connect(self.deletecustomer) self.closelistbutton = QPushButton("关闭", self.listframe) self.closelistbutton.setGeometry(100, 650, 50, 25) self.closelistbutton.clicked.connect(lambda: self.ShowNotPay(False)) self.getcheckrange() self.TableXY() label = QLabel(self) label.setFont(QFont("微软雅黑", 9, QFont.Bold)) label.setGeometry(self.Cell[0][8].x + 155, self.Cell[0][8].y - 115, 29, 625) label.setText( "白\n联\n存\n根\n\n红\n联\n收\n款\n签\n名\n作\n欠\n款\n依\n据\n \n蓝\n联\n仓\n库\n \n黄\n联\n客\n户" ) self.Write() self.ChoosePrintColor() self.LineEdit() def ShowNotPay(self, a): """ 显示未付款客户,以及打开数据库的'sh'或'Kucun'table :param a: bool :return: """ if a == False: #填写模式 print("close") self.commodityData.model.setTable("sh") self.setGeometry(200, 200, 1000, 800) self.listframe.setVisible(False) self.LineEditsEditAble(False) self.groupbox2.setVisible(True) self.AddinDatabase = True #定义这个变量的目的是为了传递此时是否是处于查看模式,以便阻止将数据存入数据库 self.listwidget.clear() else: #查看模式 self.commodityData.model.setTable("Kucun") self.setGeometry(200, 200, 1400, 800) self.listframe.setVisible(True) self.LineEditsEditAble(True) self.groupbox2.setVisible(False) year = datetime.date.today().year + 1 self.AddinDatabase = False self.AddListItem(self.kucundandata.getData('date', str(year), "<=")) def ChoosePrintColor(self): self.printer = QPrinter(QPrinter.HighResolution) self.printerbutton = QPushButton("打印", self) self.printerbutton.setStyleSheet( "background-color:rgb(240,128,128,250)") self.printerbutton.setGeometry(200, 650, 50, 50) self.printerbutton.clicked.connect(self.Print) self.checkpay = QPushButton("查看未付款", self) self.checkpay.setStyleSheet("background-color:rgb(240,128,128,250)") self.checkpay.clicked.connect(lambda: self.ShowNotPay(True)) self.checkpay.setGeometry(300, 650, 100, 50) self.colorlabel = QLabel(self) self.colorlabel.setGeometry(0, 0, 940, 630) self.colorlabel.setFrameShape(QFrame.Box) self.colorlabel.setStyleSheet("background-color:rgb(255,0,0,0)") self.redcheckbutton = QRadioButton("红色(客户)") self.whitecheckbutton = QRadioButton("白色(存根)") self.yellowcheckbutton = QRadioButton("黄色(会计)") self.bluecheckbutton = QRadioButton("蓝色(回单)") self.whitecheckbutton.setChecked(True) frame = QFrame(self) frame.setGeometry(700, 630, 120, 140) vlayout = QVBoxLayout() vlayout.addWidget(self.whitecheckbutton) vlayout.addWidget(self.yellowcheckbutton) vlayout.addWidget(self.bluecheckbutton) vlayout.addWidget(self.redcheckbutton) vlayout.addStretch(1) groupbox1 = QGroupBox("颜色", frame) groupbox1.setLayout(vlayout) self.yifu = QRadioButton("已付款") self.weifu = QRadioButton("未付款") vlayout1 = QVBoxLayout() vlayout1.addStretch(1) vlayout1.addWidget(self.yifu) vlayout1.addWidget(self.weifu) self.groupbox2 = QGroupBox("付款情况", self) self.groupbox2.setLayout(vlayout1) self.groupbox2.setGeometry(570, 630, 120, 90) self.yifu.toggled.connect(self.addcustomer) self.weifu.toggled.connect(self.addcustomer) def getYingYeEData(self, status): data = [] if self.weifu.isChecked(): data.append(self.yingyeedate) #确保该客户与未付款库存单的日期一致 else: data.append(self.dateedit.text() + datetime.datetime.now().strftime(' %H:%M:%S')) data.append(self.customer.text()) data.append(self.sumlabel.text()) data.append(status) print(data) return data def CheckTable(self): if self.customer.text()=="" or self.danjubianhao.text()=="" \ or self.chuhuocangku.text()=="" or self.customertel.text()=="" or self.address.text()=="" or self.dateedit.text()=="": QMessageBox.warning(self, "注意", "请将库存单信息填完整") return False for i in range(4): if self.beizhulineedits[i].text() == "": QMessageBox.warning(self, "注意", "请将库存单信息填完整") return False return True def getnotpaydata(self): """ 次函数用于获得未付款的数据,便于存于数据库 :return: """ data = [] data.append( self.dateedit.text() + datetime.datetime.now().strftime(' %H:%M:%S')) # 需要加上本地时间保证订单唯一性 self.yingyeedate = data[0] data.append(self.customer.text()) data.append(self.danjubianhao.text()) data.append(self.chuhuocangku.text()) data.append(self.customertel.text()) data.append(self.address.text()) for i in range(5): data.append(self.beizhulineedits[i].text()) for i in range(10): for j in range(8): data.append(self.lineedits[i][j].text()) return data def addcustomer(self): if self.yifu.isChecked(): print("已付款") else: print("未付款") def filltable(self): """ 填写表格的数量和单价时自动补全 :return: None """ heji = 0 amount = 0 print("func:filltable") for i in range(10): if self.lineedits[i][4].text() != "" and self.lineedits[i][5].text( ) != "": total = float(self.lineedits[i][4].text()) * float( self.lineedits[i][5].text()) heji += total amount += float(self.lineedits[i][4].text()) self.lineedits[i][6].setText(str(total)) else: self.lineedits[i][6].setText("") if heji != 0: h = str(int(heji * 100)) change = "" print(h) for i in range(1, len(h) + 1): t = lower_to_upper[h[-i]] + title2[-i] change = t + change self.hejilabel.setText(change) self.amountlabel.setText(str(amount)) self.sumlabel.setText(str(heji)) else: self.hejilabel.setText("") self.amountlabel.setText("") self.sumlabel.setText("") def CheckData(self): """ 填写表格的编号时自动补全 :return: """ print("func:CheckData") for i in range(10): if self.commodityData.Find(self.lineedits[i][0].text()): k = self.commodityData.getData(self.lineedits[i][0].text()) for j in range(1, 3): self.lineedits[i][j].setText(k[j]) def LineEdit(self): """ 定义表格的lineedit对象 :return: """ self.lineedits = [[QLineEdit(self) for col in range(8)] for row in range(10)] for i in range(10): for j in range(8): self.lineedits[i][j].setGeometry( self.Cell[i + 1][j + 1].x, self.Cell[i + 1][j + 1].y, self.Cell[i + 1][j + 1].width, self.Cell[i + 1][j + 1].height) self.lineedits[i][j].setStyleSheet( "background-color:rgb(0,0,0,0)") self.lineedits[i][j].setFrame(False) if j == 4 or j == 5: self.lineedits[i][j].textChanged.connect(self.filltable) elif j == 0: self.lineedits[i][j].textChanged.connect(self.CheckData) self.beizhulineedits = [QLineEdit(self) for i in range(5)] for i in range(5): self.beizhulineedits[i].setStyleSheet("background:rgb(0,0,0,0)") self.beizhulineedits[i].setFrame(QFrame.NoFrame) self.beizhulineedits[i].setFont(QFont("微软雅黑", 9, QFont.Bold)) if i == 0: self.beizhulineedits[i].setGeometry(self.beizhuxy[i].x + 50, self.beizhuxy[i].y - 20, 100, 30) elif i < 4 and i > 0: self.beizhulineedits[i].setGeometry(self.beizhuxy[i].x + 70, self.beizhuxy[i].y - 20, 100, 30) else: self.beizhulineedits[i].setGeometry(self.beizhuxy[i].x + 170, self.beizhuxy[i].y - 20, 60, 30) self.dateedit = QLineEdit(self) self.dateedit.setFrame(QFrame.NoFrame) self.dateedit.setStyleSheet("background-color:rgb(0,0,0,0)") self.dateedit.setGeometry(self.Cell[0][8].x - 20, self.Cell[0][2].y - 2 * self.height - 28, 190, 25) self.danjubianhao = QLineEdit(self) self.danjubianhao.setFrame(QFrame.NoFrame) self.danjubianhao.setStyleSheet("background-color:rgb(0,0,0,0)") self.danjubianhao.setGeometry(self.Cell[0][8].x - 20, self.Cell[0][2].y - 2 * self.height, 190, 25) self.chuhuocangku = QLineEdit(self) self.chuhuocangku.setFrame(QFrame.NoFrame) self.chuhuocangku.setStyleSheet("background-color:rgb(0,0,0,0)") self.chuhuocangku.setGeometry(self.Cell[0][0].x + 80, self.Cell[0][0].y - 50, 220, 25) self.customertel = QLineEdit(self) self.customertel.setFrame(QFrame.NoFrame) self.customertel.setStyleSheet("background-color:rgb(0,0,0,0)") self.customertel.setGeometry(self.Cell[0][0].x + 80, self.Cell[0][0].y - 25, 220, 25) self.customer = QLineEdit(self) self.customer.setFrame(QFrame.NoFrame) self.customer.setStyleSheet("background-color:rgb(0,0,0,0)") self.customer.setGeometry(self.Cell[0][3].x + 45, self.Cell[0][3].y - 50, 200, 25) self.address = QLineEdit(self) self.address.setFrame(QFrame.NoFrame) self.address.setStyleSheet("background-color:rgb(0,0,0,0)") self.address.setGeometry(self.Cell[0][3].x + 45, self.Cell[0][3].y - 25, 300, 25) def TableXY(self): """ 定义表格的单元格的长宽 :return: """ self.x = 10 self.y = 125 self.height = 32 self.Cell = [] self.colwidth = { 1: 32, 2: 80, 3: 200, 4: 50, 5: 150, 6: 80, 7: 80, 8: 80, 9: 150 } for i in range(11): l = [] for j in range(9): x = 0 for z in range(j): x += self.colwidth[z + 1] l.append( Cell_Set(x + self.x, self.height * i + self.y, self.colwidth[j + 1], self.height)) self.Cell.append(l) self.zhidan = Cell_Set(self.Cell[10][0].x + 10, self.Cell[10][0].y + 175, 0, 0) self.jingshouren = Cell_Set(self.Cell[10][0].x + 170, self.Cell[10][0].y + 175, 0, 0) self.shoukuangren = Cell_Set(self.Cell[10][0].x + 340, self.Cell[10][0].y + 175, 0, 0) self.fahuoren = Cell_Set(self.Cell[10][0].x + 510, self.Cell[10][0].y + 175, 0, 0) self.kehu = Cell_Set(self.Cell[10][0].x + 700, self.Cell[10][0].y + 175, 0, 0) self.beizhuxy = [ self.zhidan, self.jingshouren, self.shoukuangren, self.fahuoren, self.kehu ] def Write(self): """ 在屏幕上画上库存单合计及以下的内容 :return: """ self.jiaoyi = QLabel(self) self.jiaoyi.setFont(QFont("微软雅黑", 10, QFont.Bold)) self.jiaoyi.setGeometry(self.Cell[10][0].x, self.Cell[10][0].y + 62, 890, 97) self.jiaoyi.setText( "交易协议:1.客户收货时请当面核对数量、质量,如有质量问题请于签收后三天内提出异议,超期通知我司将不予处理。\n" "2.*****价差损失负责,对所造成的期待利益、下家损失、商誉损失均不承担责任。" "3.此单作为买卖双方****合同,\n*****************买方必须在当天内付清贷款,逾期每天按总金额1%加收违约金。\n" ) self.jiaoyi.setStyleSheet("background-color:rgb(0,0,0,0)") beizu = QLabel("备注:", self) beizu.setFont(QFont("微软雅黑", 12, QFont.Bold)) beizu.setGeometry(self.Cell[10][0].x, self.Cell[10][0].y + 129, 50, 25) beizu.setStyleSheet("background-color:rgb(0,0,0,0)") width1 = 0 width2 = 0 for i in range(7): if i < 5: width1 += self.Cell[0][i].width else: width2 += self.Cell[0][i].width label2 = QLabel("合计:", self) label2.setFont(QFont("微软雅黑", 10, QFont.Bold)) label2.setGeometry(self.Cell[10][0].x, self.Cell[10][0].y + self.height, width1 + 1, self.height) label2.setFrameShape(QFrame.Box) self.amountlabel = QLabel(self) self.amountlabel.setGeometry(self.Cell[10][5].x, self.Cell[10][0].y + self.height, width2 + 1, self.height) self.amountlabel.setFrameShape(QFrame.Box) self.sumlabel = QLabel(self) self.sumlabel.setGeometry(self.Cell[10][7].x, self.Cell[10][0].y + self.height, self.Cell[10][7].width + 1, self.height) self.sumlabel.setFrameShape(QFrame.Box) label5 = QLabel(self) label5.setGeometry(self.Cell[10][8].x, self.Cell[10][0].y + self.height, self.Cell[10][8].width + 1, self.height) label5.setFrameShape(QFrame.Box) label2.setStyleSheet("background-color:rgb(255,0,0,0)") label5.setStyleSheet("background-color:rgb(255,0,0,0)") self.hejilabel = QLabel(self) self.hejilabel.setGeometry(self.Cell[10][0].x + 60, self.Cell[10][0].y + self.height, width1 + 1, self.height) self.hejilabel.setStyleSheet("background-color:rgb(255,0,0,0)") self.amountlabel.setStyleSheet("background-color:rgb(255,0,0,0)") self.sumlabel.setStyleSheet("background-color:rgb(255,0,0,0)") def paintEvent(self, event): painter = QPainter(self) self.DrawReceipt(painter) def DrawReceipt(self, painter): title = "东莞市天航五金制品有限公司 销售出库单" address = "地址:东莞市东城区温塘红槟榔东日仓库3号" tel = "电话:0769-23831842 81805899 传真:0769-27205560" title1 = [ "No.", "商品编号", " 商 品 名 称 ", "单位", " 规 格 ", " 数 量 ", " 单 价 ", " 金 额 ", " 备 注 " ] for i in range(11): for j in range(9): painter.drawRect(self.Cell[i][j].x, self.Cell[i][j].y, self.Cell[i][j].width, self.Cell[i][j].height) #填入文字 painter.setFont(QFont("微软雅黑", 16, QFont.Bold)) painter.drawText( QRect(self.Cell[0][2].x - 6, self.Cell[0][2].y - 3 * self.height - 25, 550, 40), Qt.AlignCenter, title) painter.setFont(QFont("微软雅黑", 10, QFont.Bold)) painter.drawText( QRect(self.Cell[0][2].x + 50, self.Cell[0][2].y - 2 * self.height - 33, 350, 40), Qt.AlignCenter, address) painter.drawText( QRect(self.Cell[0][8].x - 100, self.Cell[0][2].y - 2 * self.height - 35, 100, 40), Qt.AlignCenter, "销售日期:") painter.drawText( QRect(self.Cell[0][2].x - 3, self.Cell[0][2].y - 2 * self.height - 14, 500, 40), Qt.AlignCenter, tel) painter.drawText( QRect(self.Cell[0][8].x - 100, self.Cell[0][2].y - 2 * self.height - 10, 100, 40), Qt.AlignCenter, "单据编号:") painter.drawText( QRect(self.Cell[0][0].x - 6, self.Cell[0][0].y - self.height - 25, 100, 40), Qt.AlignCenter, "出货仓库:") painter.drawText( QRect(self.Cell[0][0].x - 6, self.Cell[0][0].y - self.height, 100, 40), Qt.AlignCenter, "客户电话:") painter.drawText( QRect(self.Cell[0][3].x - 22, self.Cell[0][3].y - self.height - 25, 100, 40), Qt.AlignCenter, "客户:") painter.drawText( QRect(self.Cell[0][3].x - 22, self.Cell[0][3].y - self.height, 100, 40), Qt.AlignCenter, "地址:") for i in range(1, 11): painter.drawText( QRect(self.Cell[0][0].x, self.Cell[i][0].y, self.Cell[i][0].width, self.Cell[i][0].height), Qt.AlignCenter, str(i)) for j in range(9): painter.drawText( QRect(self.Cell[0][j].x, self.Cell[0][j].y, self.Cell[0][j].width, self.Cell[0][j].height), Qt.AlignCenter, title1[j]) painter.setFont(QFont("微软雅黑", 12, QFont.Bold)) painter.drawText(self.zhidan.x, self.zhidan.y, "制单:") painter.drawText(self.jingshouren.x, self.jingshouren.y, "经手人:") painter.drawText(self.shoukuangren.x, self.shoukuangren.y, "收款人:") painter.drawText(self.fahuoren.x, self.fahuoren.y, "发货人:") painter.drawText(self.kehu.x, self.kehu.y, "客户签字(盖章):") pixmap = QPixmap("607.jpg") painter.setOpacity(0.65) painter.drawPixmap(QRect(0, 632, 1500, 200), pixmap) """ 打印 """ def Print(self): if self.CheckTable() == False: #如果库存单信息不完整,将不能打印 return if not (self.yifu.isChecked() or self.weifu.isChecked()) and self.AddinDatabase == True: QMessageBox.warning(self, "警告", "请选择“付款情况") return if self.AddinDatabase: #在非查看模式下打印才会将数据存入数据库 #if True: print("yes") if not self.yifu.isChecked(): #将未付款客户订单存入数据库 print(self.getnotpaydata()) self.kucundandata.InsertData(self.getnotpaydata()) self.yingye.InsertData(self.getYingYeEData("未付款")) #print(self.getYingYeEData("未付款")) else: self.yingye.InsertData(self.getYingYeEData("已付款")) #print(self.getYingYeEData("已付款")) for i in range(10): #将从没出现过的商品存入数据库 if self.commodityData.Find( self.lineedits[i][0].text()) == False: self.commodityData.InsertData(self.lineedits[i][0].text(), self.lineedits[i][1].text(), self.lineedits[i][2].text()) for i in range(4): if i == 0: self.redcheckbutton.setChecked(True) self.colorlabel.setStyleSheet( "background-color:rgba(255,0,0,25)") elif i == 1: self.whitecheckbutton.setChecked(True) self.colorlabel.setStyleSheet( "background-color:rgba(255,255,255,25)") elif i == 2: self.yellowcheckbutton.setChecked(True) self.colorlabel.setStyleSheet( "background-color:rgba(255,255,0,25)") else: self.bluecheckbutton.setChecked(True) self.colorlabel.setStyleSheet( "background-color:rgba(0,255,255,25)") preview = QPrintPreviewDialog(self.printer, self) preview.setGeometry(100, 100, 1200, 900) """ 以下两句实现控制打印纸张的大小 QSizeF 中的第二个参数是height ,第一个是width """ self.printer.setPageSize(QPrinter.Custom) self.printer.setPaperSize(QSizeF(1880, 1260), QPrinter.Point) #QSizeF 中的参数按比例改变可以填充满纸张 preview.paintRequested.connect(self.PlotPic) preview.exec() # 显示预览窗口 self.colorlabel.setStyleSheet("background-color:rgba(255,255,255,25)") self.bluecheckbutton.setChecked(False) def PlotPic(self): painter = QPainter(self.printer) # QRect(0,0) 中(0,0)是窗口坐标 image = self.grab(QRect(QPoint(0, 0), QSize(940, 630))) # /* 绘制窗口至画布 */ rect = painter.viewport() size = image.size() size.scale(rect.size(), Qt.KeepAspectRatio) # //此处保证图片显示完整 painter.setViewport(rect.x(), rect.y(), size.width(), size.height()) painter.setWindow(image.rect()) painter.drawPixmap(0, 0, image)
class SongList(QWidget): def __init__(self, parent=None): super(SongList, self).__init__(parent) os.chdir(os.path.dirname(os.path.abspath(__file__))) resourcesPath = os.getcwd() resourcesPath = os.path.join(resourcesPath, "resources") self.PLAY_ICON = QIcon(QPixmap(os.path.join(resourcesPath, "play.png"))) self.PAUSE_ICON = QIcon(QPixmap(os.path.join(resourcesPath, "pause.png"))) self.STOP_ICON = QIcon(QPixmap(os.path.join(resourcesPath, "stop.png"))) self.DELETE_ICON = QIcon(QPixmap(os.path.join(resourcesPath, "delete.png"))) self.setupMediaPlayer() self.setupUi() def setupMediaPlayer(self): self.mediaPlayer = QMediaPlayer() self.mediaPlayer.setNotifyInterval(1) self.mediaPlayer.stateChanged.connect(self.mediaStateChanged) self.mediaPlayer.positionChanged.connect(self.positionChanged) self.mediaPlayer.durationChanged.connect(self.durationChanged) def setupUi(self): self.setWindowTitle("List of songs") mainLayout = QHBoxLayout(self) verticalListLayout = QVBoxLayout() self.songsListWidget = QListWidget() self.songsListWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.songsListWidget.customContextMenuRequested.connect(self.listWidgetRightClick) verticalListLayout.addWidget(self.songsListWidget) miniHorizontalLayout = QHBoxLayout() locatorLine = QLineEdit() locatorLine.setPlaceholderText("Locator") locatorBox = QComboBox() items = ["Title", "Status", "Description", "Style", "All"] locatorBox.addItems(items) locatorBox.setCurrentIndex(len(items)-1) miniHorizontalLayout.addWidget(locatorLine) miniHorizontalLayout.addWidget(locatorBox) locatorLine.textChanged.connect(lambda:self.populateList(locatorLine.text(), locatorBox.currentText())) verticalListLayout.addLayout(miniHorizontalLayout) self.mainForm = QGroupBox() self.mainForm.setTitle("Details") mainLayout.addLayout(verticalListLayout) mainLayout.addWidget(self.mainForm) self.populateList() self.mainFormSetupUi() #self.show() self.songsListWidget.currentRowChanged.connect(self.changePage) def mainFormSetupUi(self): """title, status style, duration, descriptin, location, project, variation_another_song, timestamp""" mainLayout = QVBoxLayout(self.mainForm) #Horizontal Layout 1 horizontalLayout1 = QHBoxLayout() titleLabel = QLabel("Song name:") self.titleEdit = QLineEdit() self.titleEdit.editingFinished.connect(self.checkSong) self.titleEdit.textChanged.connect(self.validateSong) horizontalLayout1.addWidget(titleLabel) horizontalLayout1.addWidget(self.titleEdit) #Horizontal Layout 2 horizontalLayout2 = QHBoxLayout() statusLabel = QLabel("Status:") self.statusBox = QComboBox() dateLabel = QLabel("Date:") self.dateEdit = QDateTimeEdit() self.dateEdit.setCalendarPopup(True) horizontalLayout2.addWidget(statusLabel) horizontalLayout2.addWidget(self.statusBox) horizontalLayout2.addStretch(1) horizontalLayout2.addWidget(dateLabel) horizontalLayout2.addWidget(self.dateEdit) #Style Groupbox, widgets added automatically self.styleGroupBox = QGroupBox() self.styleGroupBox.setTitle("Style:") self.styleLayout = QGridLayout(self.styleGroupBox) horizontalLayout3 = QHBoxLayout() durationLabel = QLabel("Duration:") self.durationLine = QTimeEdit() self.durationLine.setDisplayFormat("mm:ss") projectLabel = QLabel("Project") self.projectComboBox = QComboBox() self.projectComboBox.setEditable(True) horizontalLayout3.addWidget(durationLabel) horizontalLayout3.addWidget(self.durationLine) horizontalLayout3.addWidget(projectLabel) horizontalLayout3.addWidget(self.projectComboBox) horizontalLayout4 = QHBoxLayout() descriptionLabel = QLabel("Description:") variationLabel = QLabel("Variation from another song: ") self.variationLine = QLineEdit() horizontalLayout4.addWidget(descriptionLabel) horizontalLayout4.addStretch(1) horizontalLayout4.addWidget(variationLabel) horizontalLayout4.addWidget(self.variationLine) self.descriptionTextEdit = QTextEdit() horizontalLayout5 = QHBoxLayout() locationLabel = QLabel("Location:") self.locationLine = QLineEdit() self.locationButton = QPushButton("...") self.locationButton.clicked.connect(self.locateFile) horizontalLayout5.addWidget(locationLabel) horizontalLayout5.addWidget(self.locationLine) horizontalLayout5.addWidget(self.locationButton) horizontalLayout6 = QHBoxLayout() self.slider = QSlider(Qt.Horizontal) self.slider.sliderReleased.connect(self.playSlider) self.slider.setStyleSheet("QSlider::handle:horizontal { border: 1px solid #777; background:#b55858;}") horizontalLayout6.addWidget(self.slider) horizontalLayout7 = QHBoxLayout() self.playButton = QPushButton() self.stopButton = QPushButton() self.playButton.setIcon(self.PLAY_ICON) self.stopButton.setIcon(self.STOP_ICON) self.playButton.clicked.connect(self.playSong) self.stopButton.clicked.connect(self.stopSong) horizontalLayout7.addStretch(1) horizontalLayout7.addWidget(self.playButton) horizontalLayout7.addWidget(self.stopButton) horizontalLayout7.addStretch(1) horizontalLayout8 = QHBoxLayout() self.saveButton = QPushButton() self.saveButton.setText("Save") self.saveButton.clicked.connect(self.saveSong) horizontalLayout8.addStretch(1) horizontalLayout8.addWidget(self.saveButton) mainLayout.addLayout(horizontalLayout1) mainLayout.addLayout(horizontalLayout2) mainLayout.addWidget(self.styleGroupBox) mainLayout.addLayout(horizontalLayout3) mainLayout.addLayout(horizontalLayout4) mainLayout.addWidget(self.descriptionTextEdit) mainLayout.addLayout(horizontalLayout5) mainLayout.addLayout(horizontalLayout6) mainLayout.addLayout(horizontalLayout7) mainLayout.addLayout(horizontalLayout8) def clearForm(self): self.titleEdit.clear() self.statusBox.clear() for widget in self.styleGroupBox.children(): if not isinstance(widget, QGridLayout): widget.deleteLater() self.durationLine.clear() self.projectComboBox.clear() self.variationLine.clear() self.descriptionTextEdit.clear() self.locationLine.clear() def changePage(self, index): title = self.songsListWidget.item(index).data(Qt.UserRole) self.clearForm() self.populateForm(title) self.slider.setValue(0) def populateForm(self, title): #title is the primary key listArray = queries("""SELECT title, status, style, duration, description, location, project, variation_another_song, timestamp from songs WHERE title = ?""", (title,)) print(listArray) if len(listArray) != 0: title = listArray[0][0] status = listArray[0][1] styles = [] styleArray = listArray[0][2] if styleArray != None: if "," in styleArray: styles = styleArray.split(",") else: styles.append(styleArray) duration = listArray[0][3] description = listArray[0][4] location = listArray[0][5] project = listArray[0][6] variation_another_song = listArray[0][7] timestamp = listArray[0][8] else: title = None status = None styles = None duration = None description = None location = None project = None variation_another_song = None timestamp = None if title != None: self.titleEdit.setText(title) self.statusBox.addItems(["Select...", "Demo", "WIP", "Idea", "Unfinished song", "EQ", "Master", "Finished"]) if status != None: self.statusBox.setCurrentText(status) if timestamp != None: self.dateEdit.setDateTime(datetime.strptime(timestamp, '%d/%m/%Y %H:%M')) else: self.dateEdit.setDateTime(datetime.now())#default styleArray = queries("select style from songs where style is not null") """ print(styleArray) if styleArray != None: styleArray = styleArray[0][0] if "," in styleArray: styles = styleArray.split(",") else: styles.append(styleArray)""" stylesArray = [] query = queries("select style from songs where style is not null") if len(query) != 0: for style in query: stylesMiniArray = style[0].split(",") stylesMiniArray = list(filter(None, stylesMiniArray)) for item in stylesMiniArray: if item not in stylesArray: if item != '': stylesArray.append(item) self.x = 0 self.y = 0 if len(stylesArray) != 0: for style in stylesArray: print("style", style) checkBox = QCheckBox(style) self.styleLayout.addWidget(checkBox, self.x, self.y) self.checkBoxPositionAsignment() self.addStyle() if styles!= None: if len(styles) != 0: for style in styles: for checkbox in self.styleGroupBox.children(): if isinstance(checkbox, QCheckBox): if checkbox.text() == style: checkbox.setChecked(True) if duration != None: time = QTime(0,0,0) self.durationLine.setTime(time.addSecs(duration)) projectsArray = ["Select..."] projectsArrayQuery = queries("SELECT project from songs") if len(projectsArrayQuery) != 0: for project in projectsArrayQuery[0]: if project not in projectsArray: projectsArray.append(project) if project != None: self.projectComboBox.setCurrentText(project) if variation_another_song != None: self.variationLine.setText(variation_another_song) if description != None: self.descriptionTextEdit.setText(description) available = False if location != None: self.locationLine.setText(location) if len(self.locationLine.text()) != 0: try: self.playlist = QMediaPlaylist() self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(location))) self.mediaPlayer.setPlaylist(self.playlist) except: pass available = True#I know this is stupid but just in case self.slider.setVisible(available) self.playButton.setVisible(available) self.stopButton.setVisible(available) def populateList(self, locatorItem=None, locatorColumn=None): print(locatorItem, locatorColumn) self.songsListWidget.blockSignals(True) self.songsListWidget.clear() if locatorItem == None or locatorItem == "": listArray = queries("""SELECT title, status, timestamp from songs """) print(listArray) else: if locatorColumn != "All": #No strings concatenation, no security holes if locatorColumn == "Title": sql = """SELECT title, status, timestamp from songs where title LIKE ?""" elif locatorColumn == "Status": sql = """SELECT title, status, timestamp from songs where status LIKE ?""" elif locatorColumn == "Description": sql = """SELECT title, status, timestamp from songs where description LIKE ?""" elif locatorColumn == "Style": sql = """SELECT title, status, timestamp from songs where style LIKE ?""" locatorItem = "%" + locatorItem + "%" listArray = queries(sql, (locatorItem,)) else: locatorItem = "%" + locatorItem + "%" variables = [locatorItem, locatorItem, locatorItem, locatorItem, locatorItem] listArray = queries("""SELECT title, status, timestamp from songs where title LIKE ? OR type LIKE ? OR original_song LIKE ? OR link LIKE ? OR description LIKE ?""", variables) for item in listArray: title = item[0] status = item[1] timestamp = item[2] try: timestamp = datetime.strptime(timestamp, "%d/%m/%Y %H:%M") timestamp = timestamp.strftime("%d/%m/%Y") except: timestamp = "" text = "%s %s %s" % (title, status, timestamp) qItem = QListWidgetItem(text) qItem.setData(Qt.UserRole, title) self.songsListWidget.addItem(qItem) #new idea qItem = QListWidgetItem("New song...") qItem.setData(Qt.UserRole, "New song...") #otherwise that would be an error self.songsListWidget.addItem(qItem) self.songsListWidget.blockSignals(False) def listWidgetRightClick(self, position): widgetItem = self.songsListWidget.itemAt(position) if widgetItem != None: #quick lazy text fix if widgetItem.text() != "New song...": print(widgetItem.text()) menu = QMenu() deleteAction = QAction(self.DELETE_ICON, "Delete song") menu.addAction(deleteAction) action = menu.exec(self.mapToGlobal(position)) if action == deleteAction: msg = QMessageBox.question(None, "Delete?", "Are you sure you want to delete this entry?") if msg == QMessageBox.Yes: title = widgetItem.data(Qt.UserRole) queries("DELETE from songs where title = ?", (title,)) self.populateList() self.songsListWidget.setCurrentRow(0) def songVariations(self): sql = "SELECT title from songs" songArray = [] for song in queries(sql)[0]: songArray.append(song) return songArray def checkBoxPositionAsignment(self): self.y += 1 if self.y == 4: self.y = 0 self.x += 1 def addStyle(self, text=""): "text = "" if comes from outside" self.styleEdit = QLineEdit() self.styleEdit.setPlaceholderText("Style") self.styleEdit.textChanged.connect(self.validateStyle) self.styleEdit.returnPressed.connect(lambda: self.addStyle(self.styleEdit.text())) if text != "": self.styleLayout.takeAt(self.styleLayout.count()-1).widget().deleteLater() styleCheckBox = QCheckBox() styleCheckBox.setText(text) print(text) self.styleLayout.addWidget(styleCheckBox, self.x, self.y) self.checkBoxPositionAsignment() print(self.durationLine.text()) self.styleLayout.addWidget(self.styleEdit) def checkSong(self): text = self.titleEdit.text() sql = "SELECT title from songs where title = ?" if len(queries(sql, (text,))) != 0: self.titleEdit.setText("") def validateSong(self): pass #VALIDATE REG EXP def validateStyle(self, text): if "," in text: self.styleEdit.undo() def playSong(self): if self.mediaPlayer.state() == QMediaPlayer.PlayingState: self.mediaPlayer.pause() else: self.mediaPlayer.play() def mediaStateChanged(self): if self.mediaPlayer.state() == QMediaPlayer.PlayingState: self.playButton.setIcon(self.PAUSE_ICON) else: self.playButton.setIcon(self.PLAY_ICON) def positionChanged(self, position): if position != self.mediaPlayer.duration(): self.slider.setValue(position) def durationChanged(self, duration): if duration != self.mediaPlayer.position(): print("duration chagned") self.slider.setRange(0, duration) def playSlider(self): self.mediaPlayer.setPosition(self.slider.value()) def stopSong(self): self.mediaPlayer.stop() def locateFile(self): self.fileSystem = QFileDialog(filter="Sound files (*.wav *.mp3 *.flac)") self.fileSystem.show() self.fileSystem.fileSelected.connect(self.fileLoaded) def fileLoaded(self, path): self.locationLine.setText(path) try: self.playlist = QMediaPlaylist() self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(path))) self.mediaPlayer.setPlaylist(self.playlist) except: print("fail") self.slider.setVisible(True) self.playButton.setVisible(True) self.stopButton.setVisible(True) def saveSong(self): title = self.titleEdit.text() status = self.statusBox.currentText() date = self.dateEdit.text() style = "" print(status, style) x = 0 for checkBox in self.styleGroupBox.children(): if isinstance(checkBox, QCheckBox): if checkBox.isChecked(): style += (checkBox.text()) + "," x+=1 if x != 0: style = style.rstrip(",") else: style = None duration = self.durationLine.time() duration = QTime(0, 0).secsTo(duration) project = self.projectComboBox.currentText() variation = self.variationLine.text() description = self.descriptionTextEdit.toPlainText() location = self.locationLine.text() variables = [title, status, description, location, project,\ variation, date, style, duration] print("---------", variables) sql = """INSERT OR REPLACE into songs (title, status, description, location, project, variation_another_song, timestamp, style, duration) values (?, ?, ?, ?, ?, ?, ?, ?, ?)""" queries(sql, variables) self.populateList()
class QtDBConsoleWindow(QMainWindow): def __init__(self, master): super(QtDBConsoleWindow, self).__init__() self.master = master self.connection = self.master.connection self.GroupBoxSeg = [1, 10, 1] self.processing = [] #Fixme: QTimer to be added to update the page automatically self.mainWidget = QWidget() self.mainLayout = QGridLayout() self.mainWidget.setLayout(self.mainLayout) self.setCentralWidget(self.mainWidget) self.occupied() self.setLoginUI() self.createHeadLine() self.createMain() self.createApp() if isActive(self.connection): self.connectDB() def setLoginUI(self): self.setGeometry(200, 200, 600, 1200) self.setWindowTitle('Database Console') self.menubar = self.menuBar() self.menubar.setNativeMenuBar(False) ################################################### ## Database Menu ################################################### self.actionDatabase = self.menubar.addMenu("&Database") self.ViewerAction = QAction("&View Table") self.ViewerAction.triggered.connect(self.viewTable) self.actionDatabase.addAction(self.ViewerAction) ################################################### ## Image Menu ################################################### self.actionImage = self.menubar.addMenu("&Image") self.InsertImgAction = QAction("&Insert Image") self.InsertImgAction.triggered.connect(self.insertImage) self.actionImage.addAction(self.InsertImgAction) self.ViewImgAction = QAction("&View Image") self.ViewImgAction.triggered.connect(self.viewImage) self.actionImage.addAction(self.ViewImgAction) ################################################### ## Shipment Menu ################################################### self.actionShipment = self.menubar.addMenu("&Shipment") self.sendPackAction = QAction("&Send Package") self.sendPackAction.triggered.connect(self.sendPackage) self.actionShipment.addAction(self.sendPackAction) self.receivePackAction = QAction("&Receive Package") self.receivePackAction.triggered.connect(self.receivePackage) self.actionShipment.addAction(self.receivePackAction) ################################################### ## User Menu ################################################### self.actionUser = self.menubar.addMenu("&User") self.ShowUserAction = QAction("&Show Users", self) self.ShowUserAction.triggered.connect(self.displayUsers) self.actionUser.addAction(self.ShowUserAction) self.AddUserAction = QAction("&Add Users", self) self.AddUserAction.triggered.connect(self.addUsers) self.actionUser.addAction(self.AddUserAction) self.UpdateUserAction = QAction("&Update Profile", self) self.UpdateUserAction.triggered.connect(self.updateProfile) self.actionUser.addAction(self.UpdateUserAction) self.ShowInstAction = QAction("&Show institute", self) self.ShowInstAction.triggered.connect(self.displayInstitue) self.actionUser.addAction(self.ShowInstAction) ################################################### ## Miscellanea Menu ################################################### self.actionMiscel = self.menubar.addMenu("&Miscellanea") self.ComplaintAction = QAction("&Submit Complaint", self) self.ComplaintAction.triggered.connect(self.fileComplaint) self.actionMiscel.addAction(self.ComplaintAction) self.show() def activateMenuBar(self): self.menubar.setDisabled(False) def deactivateMenuBar(self): self.menubar.setDisabled(True) def enableMenuItem(self, item, enabled): item.setEnabled(enabled) ########################################################################## ## Functions for Table Viewer ########################################################################## def viewTable(self): viewTableTab = QtViewTableTab(self) self.MainTabs.addTab(viewTableTab, "Database Viewer") self.MainTabs.setCurrentWidget(viewTableTab) ########################################################################## ## Functions for Table Viewer (END) ########################################################################## ########################################################################## ## Functions for Image ########################################################################## def insertImage(self): insertImageTab = QtImageInsertionTab(self) self.InsertImgAction.setDisabled(True) self.MainTabs.addTab(insertImageTab, "Insert Image") self.MainTabs.setCurrentWidget(insertImageTab) def viewImage(self): viewImageTab = QtImageViewerTab(self) self.MainTabs.addTab(viewImageTab, "Image Viewer") self.MainTabs.setCurrentWidget(viewImageTab) ########################################################################## ## Functions for Image (END) ########################################################################## ########################################################################## ## Functions for Shipment ########################################################################## def sendPackage(self): self.sendPackageTab = QWidget() # Add tabs self.MainTabs.addTab(self.sendPackageTab, "Send Package") self.sendPackAction.setDisabled(True) self.sendPackageTab.layout = QGridLayout(self) sendPackageLabel = QLabel('<font size="12"> Package Delivery </font>') sendPackageLabel.setMaximumHeight(60) self.SPSenderLabel = QLabel('Sender:') self.SPSenderEdit = QLineEdit('') self.SPSenderEdit.setEchoMode(QLineEdit.Normal) self.SPSenderEdit.setPlaceholderText('Sender Name') self.SPReceiverLabel = QLabel('Receiver:') self.SPReceiverEdit = QLineEdit('') self.SPReceiverEdit.setEchoMode(QLineEdit.Normal) self.SPReceiverEdit.setPlaceholderText('Receiver Name') self.SPReceiverEdit.setDisabled(True) siteList = getByColumnName("institute", describeInstitute(self.connection), retrieveAllInstitute(self.connection)) self.SPOriginLabel = QLabel('Origin:') self.SPOriginCombo = QComboBox() self.SPOriginCombo.addItems(["{0}".format(x) for x in siteList]) self.SPDestinationLabel = QLabel('Destination:') self.SPDestinationCombo = QComboBox() self.SPDestinationCombo.addItems(["{0}".format(x) for x in siteList]) self.SPDateSentLabel = QLabel('date sent:') self.SPDateSentEdit = QDateTimeEdit() self.SPDateSentEdit.setDateTime(QDateTime.currentDateTime()) self.SPDateReceivedLabel = QLabel('date received:') self.SPDateReceivedEdit = QDateTimeEdit() self.SPDateReceivedEdit.setDisabled(True) #self.SPDateReceivedEdit.setDateTime(QDateTime.currentDateTime()) self.SPCarrierLabel = QLabel('Carrier:') self.SPCarrierEdit = QLineEdit('') self.SPCarrierEdit.setEchoMode(QLineEdit.Normal) self.SPCarrierEdit.setPlaceholderText('carrier name') self.SPTrackingLabel = QLabel('Tracking Number:') self.SPTrackingEdit = QLineEdit('') self.SPTrackingEdit.setEchoMode(QLineEdit.Normal) self.SPTrackingEdit.setPlaceholderText('Tracking Code') self.SPCommentLabel = QLabel('Comment:') self.SPCommentEdit = QTextEdit('') self.SPCommentEdit.setPlaceholderText("Your comment") self.SPFeedBackLabel = QLabel() self.SPSubmitButton = QPushButton('Submit') self.SPSubmitButton.clicked.connect(self.submitSPRequest) self.sendPackageTab.layout.addWidget(sendPackageLabel, 0, 0, 1, 4, Qt.AlignTop) self.sendPackageTab.layout.addWidget(self.SPSenderLabel, 1, 0, 1, 1) self.sendPackageTab.layout.addWidget(self.SPSenderEdit, 1, 1, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDateSentLabel, 1, 2, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDateSentEdit, 1, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPOriginLabel, 2, 0, 1, 1) self.sendPackageTab.layout.addWidget(self.SPOriginCombo, 2, 1, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDestinationLabel, 2, 2, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDestinationCombo, 2, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCarrierLabel, 3, 0, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCarrierEdit, 3, 1, 1, 1) self.sendPackageTab.layout.addWidget(self.SPTrackingLabel, 3, 2, 1, 1) self.sendPackageTab.layout.addWidget(self.SPTrackingEdit, 3, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCommentLabel, 4, 0, 1, 4, Qt.AlignLeft) self.sendPackageTab.layout.addWidget(self.SPCommentEdit, 5, 0, 3, 4) self.sendPackageTab.layout.addWidget(self.SPFeedBackLabel, 8, 0, 1, 2) self.sendPackageTab.layout.addWidget(self.SPSubmitButton, 8, 3, 1, 1) self.sendPackageTab.setLayout(self.sendPackageTab.layout) self.MainTabs.setCurrentWidget(self.sendPackageTab) def submitSPRequest(self): if self.SPTrackingEdit.text() == "": self.SPFeedBackLabel.setText( "Please make sure Tracking Number are filled") return if self.SPSenderEdit.text() == "": self.SPFeedBackLabel.setText("Please make sure sender are filled") return Args = describeTable(self.connection, "shipment") Data = [] SubmitArgs = [] for arg in Args: if arg == "origin": Data.append(self.SPOriginCombo.currentText()) SubmitArgs.append(arg) if arg == "destination": Data.append(self.SPDestinationCombo.currentText()) SubmitArgs.append(arg) if arg == "sender": Data.append(self.SPSenderEdit.text()) SubmitArgs.append(arg) if arg == "date_sent": Data.append(self.SPDateSentEdit.dateTime().toUTC().toString( "yyyy-dd-MM hh:mm:ss.z")) SubmitArgs.append(arg) if arg == "carrier": Data.append(self.SPCarrierEdit.text()) SubmitArgs.append(arg) if arg == "tracking_number": Data.append(self.SPTrackingEdit.text()) SubmitArgs.append(arg) if arg == "comment": Data.append(self.SPCommentEdit.toPlainText()) SubmitArgs.append(arg) try: insertGenericTable(self.connection, "shipment", SubmitArgs, Data) except: print("Failed to submit the shipment record") return self.SPSenderLabel.deleteLater() self.SPSenderEdit.deleteLater() self.SPDateSentLabel.deleteLater() self.SPDateSentEdit.deleteLater() self.SPOriginLabel.deleteLater() self.SPOriginCombo.deleteLater() self.SPDestinationLabel.deleteLater() self.SPDestinationCombo.deleteLater() self.SPCarrierLabel.deleteLater() self.SPCarrierEdit.deleteLater() self.SPTrackingLabel.deleteLater() self.SPTrackingEdit.deleteLater() self.SPCommentLabel.deleteLater() self.SPCommentEdit.deleteLater() self.SPFeedBackLabel.deleteLater() self.SPSubmitButton.deleteLater() self.sendPackageTab.layout.removeWidget(self.SPSenderLabel) self.sendPackageTab.layout.removeWidget(self.SPSenderEdit) self.sendPackageTab.layout.removeWidget(self.SPDateSentLabel) self.sendPackageTab.layout.removeWidget(self.SPDateSentEdit) self.sendPackageTab.layout.removeWidget(self.SPOriginLabel) self.sendPackageTab.layout.removeWidget(self.SPOriginCombo) #self.sendPackageTab.layout.removeWidget(self.SPDestinationLabel) #self.sendPackageTab.layout.removeWidget(self.SPDestinationCombo) self.sendPackageTab.layout.removeWidget(self.SPCarrierLabel) self.sendPackageTab.layout.removeWidget(self.SPCarrierEdit) self.sendPackageTab.layout.removeWidget(self.SPTrackingLabel) self.sendPackageTab.layout.removeWidget(self.SPTrackingEdit) self.sendPackageTab.layout.removeWidget(self.SPCommentLabel) self.sendPackageTab.layout.removeWidget(self.SPCommentEdit) self.sendPackageTab.layout.removeWidget(self.SPFeedBackLabel) self.sendPackageTab.layout.removeWidget(self.SPSubmitButton) self.SPFeedBackLabel = QLabel("Submitted") self.SPFeedBackLabel.setStyleSheet("color:green") self.SPContinueButton = QPushButton('Continue') self.SPContinueButton.clicked.connect(self.recreateSP) self.SPCloseButton = QPushButton('Close') self.SPCloseButton.clicked.connect(self.closeSP) self.sendPackageTab.layout.addWidget(self.SPFeedBackLabel, 1, 0, 1, 2) self.sendPackageTab.layout.addWidget(self.SPContinueButton, 1, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCloseButton, 1, 4, 1, 1) return def recreateSP(self): self.closeTab(self.MainTabs.currentIndex()) self.sendPackage() def closeSP(self): self.closeTab(self.MainTabs.currentIndex()) def receivePackage(self): self.receivePackageTab = QWidget() # Add tabs self.MainTabs.addTab(self.receivePackageTab, "Receive Package") self.receivePackAction.setDisabled(True) self.receivePackageTab.layout = QGridLayout(self) receivePackageLabel = QLabel( '<font size="12"> Package Delivery </font>') receivePackageLabel.setMaximumHeight(60) self.RPIDLabel = QLabel('ID:') self.RPIDEdit = QLineEdit('') self.RPIDEdit.setEchoMode(QLineEdit.Normal) self.RPIDEdit.setPlaceholderText('Shipment ID') self.RPFetchButton = QPushButton("Fetch") self.RPFetchButton.clicked.connect(self.fillRPRequest) self.RPSenderLabel = QLabel('Sender:') self.RPSenderEdit = QLineEdit('') self.RPSenderEdit.setEchoMode(QLineEdit.Normal) self.RPSenderEdit.setPlaceholderText('Sender Name') self.RPSenderEdit.setDisabled(True) self.RPReceiverLabel = QLabel('Receiver:') self.RPReceiverEdit = QLineEdit('') self.RPReceiverEdit.setEchoMode(QLineEdit.Normal) self.RPReceiverEdit.setPlaceholderText('Receiver Name') siteList = getByColumnName("institute", describeInstitute(self.connection), retrieveAllInstitute(self.connection)) self.RPOriginLabel = QLabel('Origin:') self.RPOriginCombo = QComboBox() self.RPOriginCombo.addItems(["{0}".format(x) for x in siteList]) self.RPOriginCombo.setDisabled(True) self.RPDestinationLabel = QLabel('Destination:') self.RPDestinationCombo = QComboBox() self.RPDestinationCombo.addItems(["{0}".format(x) for x in siteList]) self.RPDestinationCombo.setDisabled(True) self.RPDateSentLabel = QLabel('date sent:') self.RPDateSentEdit = QDateTimeEdit() #self.RPDateSentEdit.setDateTime(QDateTime.currentDateTime()) self.RPDateSentEdit.setDisabled(True) self.RPDateReceivedLabel = QLabel('date received:') self.RPDateReceivedEdit = QDateTimeEdit() self.RPDateReceivedEdit.setDateTime(QDateTime.currentDateTime()) self.RPCarrierLabel = QLabel('Carrier:') self.RPCarrierEdit = QLineEdit('') self.RPCarrierEdit.setEchoMode(QLineEdit.Normal) self.RPCarrierEdit.setPlaceholderText('carrier name') self.RPCarrierEdit.setDisabled(True) self.RPTrackingLabel = QLabel('Tracking Number:') self.RPTrackingEdit = QLineEdit('') self.RPTrackingEdit.setEchoMode(QLineEdit.Normal) self.RPTrackingEdit.setPlaceholderText('Tracking Code') self.RPTrackingEdit.setDisabled(True) self.RPCommentLabel = QLabel('Comment:') self.RPCommentEdit = QTextEdit('') self.RPCommentEdit.setPlaceholderText("Your comment") self.RPFeedBackLabel = QLabel() self.RPSubmitButton = QPushButton('Submit') self.RPSubmitButton.clicked.connect(self.submitRPRequest) self.receivePackageTab.layout.addWidget(receivePackageLabel, 0, 0, 1, 4, Qt.AlignTop) self.receivePackageTab.layout.addWidget(self.RPIDLabel, 1, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPIDEdit, 1, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPFetchButton, 1, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPSenderLabel, 2, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPSenderEdit, 2, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateSentLabel, 2, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateSentEdit, 2, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPReceiverLabel, 3, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPReceiverEdit, 3, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateReceivedLabel, 3, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateReceivedEdit, 3, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPOriginLabel, 4, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPOriginCombo, 4, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDestinationLabel, 4, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDestinationCombo, 4, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCarrierLabel, 5, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCarrierEdit, 5, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPTrackingLabel, 5, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPTrackingEdit, 5, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCommentLabel, 6, 0, 1, 4, Qt.AlignLeft) self.receivePackageTab.layout.addWidget(self.RPCommentEdit, 7, 0, 3, 4) self.receivePackageTab.layout.addWidget(self.RPFeedBackLabel, 10, 0, 1, 3) self.receivePackageTab.layout.addWidget(self.RPSubmitButton, 10, 3, 1, 1) self.receivePackageTab.setLayout(self.receivePackageTab.layout) self.MainTabs.setCurrentWidget(self.receivePackageTab) def fillRPRequest(self): try: header = describeTable(self.connection, "shipment", True) shipmentInfo = retrieveWithConstraint(self.connection, "shipment", id=self.RPIDEdit.text()) except: return if len(shipmentInfo) > 0 and len(header) == len(shipmentInfo[0]): self.RPFeedBackLabel.setText("Delivery Record found") self.RPSenderEdit.setText( getByColumnName("sender", header, shipmentInfo)[0]) origin_index = self.RPOriginCombo.findText( getByColumnName("origin", header, shipmentInfo)[0]) self.RPOriginCombo.setCurrentIndex(origin_index) destination_index = self.RPDestinationCombo.findText( getByColumnName("destination", header, shipmentInfo)[0]) self.RPDestinationCombo.setCurrentIndex(destination_index) time_string = getByColumnName( "date_sent", header, shipmentInfo)[0].strftime("%m/%d/%Y, %H:%M:%S") print(time_string) self.RPDateSentEdit.setDateTime(QDateTime.fromString(time_string)) self.RPCarrierEdit.setText( getByColumnName("carrier", header, shipmentInfo)[0]) self.RPTrackingEdit.setText( getByColumnName("tracking_number", header, shipmentInfo)[0]) self.RPCommentEdit.setText( getByColumnName("comment", header, shipmentInfo)[0]) else: self.RPFeedBackLabel.setText("Shipment ID not found") self.RPSenderEdit.setText("") origin_index = self.RPOriginCombo.findText("") self.RPOriginCombo.setCurrentIndex(origin_index) destination_index = self.RPDestinationCombo.findText("") self.RPDestinationCombo.setCurrentIndex(destination_index) #time_string = datetime.strftime("%m/%d/%Y, %H:%M:%S") #self.RPDateSentEdit.setDateTime(QDateTime.fromString(time_string)) self.RPCarrierEdit.setText("") self.RPTrackingEdit.setText("") self.RPCommentEdit.setText("") def submitRPRequest(self): if self.RPTrackingEdit.text() == "": self.RPFeedBackLabel.setText( "Please make sure Tracking Number are filled") return if self.RPReceiverEdit.text() == "": self.RPFeedBackLabel.setText( "Please make sure receiver are filled") return if self.RPDateReceivedEdit.text() == "": self.RPFeedBackLabel.setText( "Please make sure received time are filled") return Args = describeTable(self.connection, "shipment") Data = [] SubmitArgs = [] for arg in Args: if arg == "receiver": Data.append(self.RPReceiverEdit.text()) SubmitArgs.append(arg) if arg == "date_received": Data.append( self.RPDateReceivedEdit.dateTime().toUTC().toString( "yyyy-dd-MM hh:mm:ss.z")) SubmitArgs.append(arg) if arg == "comment": Data.append(self.RPCommentEdit.toPlainText()) SubmitArgs.append(arg) try: updateGenericTable(self.connection, "shipment", SubmitArgs, Data, id=int(self.RPIDEdit.text())) except: print("Failed to submit the shipment record") return self.RPIDLabel.deleteLater() self.RPIDEdit.deleteLater() self.RPFetchButton.deleteLater() self.RPSenderLabel.deleteLater() self.RPSenderEdit.deleteLater() self.RPDateSentLabel.deleteLater() self.RPDateSentEdit.deleteLater() self.RPReceiverLabel.deleteLater() self.RPReceiverEdit.deleteLater() self.RPDateReceivedLabel.deleteLater() self.RPDateReceivedEdit.deleteLater() self.RPOriginLabel.deleteLater() self.RPOriginCombo.deleteLater() self.RPDestinationLabel.deleteLater() self.RPDestinationCombo.deleteLater() self.RPCarrierLabel.deleteLater() self.RPCarrierEdit.deleteLater() self.RPTrackingLabel.deleteLater() self.RPTrackingEdit.deleteLater() self.RPCommentLabel.deleteLater() self.RPCommentEdit.deleteLater() self.RPFeedBackLabel.deleteLater() self.RPSubmitButton.deleteLater() self.receivePackageTab.layout.removeWidget(self.RPIDEdit) self.receivePackageTab.layout.removeWidget(self.RPIDLabel) self.receivePackageTab.layout.removeWidget(self.RPFetchButton) self.receivePackageTab.layout.removeWidget(self.RPSenderLabel) self.receivePackageTab.layout.removeWidget(self.RPSenderEdit) self.receivePackageTab.layout.removeWidget(self.RPDateSentLabel) self.receivePackageTab.layout.removeWidget(self.RPDateSentEdit) self.receivePackageTab.layout.removeWidget(self.RPReceiverLabel) self.receivePackageTab.layout.removeWidget(self.RPReceiverEdit) self.receivePackageTab.layout.removeWidget(self.RPDateReceivedLabel) self.receivePackageTab.layout.removeWidget(self.RPDateReceivedEdit) self.receivePackageTab.layout.removeWidget(self.RPOriginLabel) self.receivePackageTab.layout.removeWidget(self.RPOriginCombo) self.receivePackageTab.layout.removeWidget(self.RPDestinationLabel) self.receivePackageTab.layout.removeWidget(self.RPDestinationCombo) self.receivePackageTab.layout.removeWidget(self.RPCarrierLabel) self.receivePackageTab.layout.removeWidget(self.RPCarrierEdit) self.receivePackageTab.layout.removeWidget(self.RPTrackingLabel) self.receivePackageTab.layout.removeWidget(self.RPTrackingEdit) self.receivePackageTab.layout.removeWidget(self.RPCommentLabel) self.receivePackageTab.layout.removeWidget(self.RPCommentEdit) self.receivePackageTab.layout.removeWidget(self.RPFeedBackLabel) self.receivePackageTab.layout.removeWidget(self.RPSubmitButton) self.RPFeedBackLabel = QLabel("Submitted") self.RPFeedBackLabel.setStyleSheet("color:green") self.RPContinueButton = QPushButton('Continue') self.RPContinueButton.clicked.connect(self.recreateRP) self.RPCloseButton = QPushButton('Close') self.RPCloseButton.clicked.connect(self.closeRP) self.receivePackageTab.layout.addWidget(self.RPFeedBackLabel, 1, 0, 1, 2) self.receivePackageTab.layout.addWidget(self.RPContinueButton, 1, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCloseButton, 1, 4, 1, 1) return def recreateRP(self): self.closeTab(self.MainTabs.currentIndex()) self.receivePackage() def closeRP(self): self.closeTab(self.MainTabs.currentIndex()) ########################################################################## ## Functions for Shipment (END) ########################################################################## def displayUsers(self): self.processing.append("UserDisplay") UserDisplayTab = QWidget() # Add tabs self.MainTabs.addTab(UserDisplayTab, "User List") UserDisplayTab.layout = QGridLayout() dataList = ([describeTable(self.connection, "people")] + retrieveGenericTable(self.connection, "people")) proxy = QtDBTableWidget(dataList, 0) lineEdit = QLineEdit() lineEdit.textChanged.connect(proxy.on_lineEdit_textChanged) view = QTableView() view.setSortingEnabled(True) comboBox = QComboBox() comboBox.addItems(["{0}".format(x) for x in dataList[0]]) comboBox.currentIndexChanged.connect( proxy.on_comboBox_currentIndexChanged) label = QLabel() label.setText("Regex Filter") view.setModel(proxy) view.setSelectionBehavior(QAbstractItemView.SelectRows) view.setSelectionMode(QAbstractItemView.MultiSelection) view.setEditTriggers(QAbstractItemView.NoEditTriggers) UserDisplayTab.layout.addWidget(lineEdit, 0, 1, 1, 1) UserDisplayTab.layout.addWidget(view, 1, 0, 1, 3) UserDisplayTab.layout.addWidget(comboBox, 0, 2, 1, 1) UserDisplayTab.layout.addWidget(label, 0, 0, 1, 1) UserDisplayTab.setLayout(UserDisplayTab.layout) self.MainTabs.setCurrentWidget(UserDisplayTab) ########################################################################## ## Functions for Managing Users ########################################################################## def addUsers(self): ## Fixme: disable the menu when tab exists, relieaze the menu when closed. self.processing.append("AddUser") AddingUserTab = QWidget() # Add tabs self.MainTabs.addTab(AddingUserTab, "Adding User") self.AddUserAction.setDisabled(True) AddingUserTab.layout = QGridLayout(self) AddUserLabel = QLabel('<font size="12"> Creating new user: </font>') AddUserLabel.setMaximumHeight(60) self.AUNewUsernameLabel = QLabel('username') self.AUNewUsernameEdit = QLineEdit('') self.AUNewUsernameEdit.setEchoMode(QLineEdit.Normal) self.AUNewUsernameEdit.setPlaceholderText('new username') self.AUPasswordLabel = QLabel('password') self.AUPasswordEdit = QLineEdit('') self.AUPasswordEdit.setEchoMode(QLineEdit.Password) self.AUPasswordEdit.setPlaceholderText('new password') self.AURePasswordLabel = QLabel('re-password') self.AURePasswordEdit = QLineEdit('') self.AURePasswordEdit.setEchoMode(QLineEdit.Password) self.AURePasswordEdit.setPlaceholderText('verify password') self.AUNameLabel = QLabel('*name') self.AUNameEdit = QLineEdit('') self.AUNameEdit.setEchoMode(QLineEdit.Normal) self.AUNameEdit.setPlaceholderText('short name') self.AUFullNameLabel = QLabel('*full name') self.AUFullNameEdit = QLineEdit('') self.AUFullNameEdit.setEchoMode(QLineEdit.Normal) self.AUFullNameEdit.setPlaceholderText('full name') self.AUEmailLabel = QLabel('e-mail') self.AUEmailEdit = QLineEdit('') self.AUEmailEdit.setEchoMode(QLineEdit.Normal) self.AUEmailEdit.setPlaceholderText('*****@*****.**') self.AUInstLabel = QLabel('institute') self.AUInstComboBox = QComboBox() siteList = getByColumnName("description", describeInstitute(self.connection), retrieveAllInstitute(self.connection)) self.AUInstComboBox.addItems(["{0}".format(x) for x in siteList]) self.AUFeedBackLabel = QLabel() self.AUSubmitButton = QPushButton('Submit') self.AUSubmitButton.clicked.connect(self.submitAURequest) AddingUserTab.layout.addWidget(AddUserLabel, 0, 0, 1, 4) AddingUserTab.layout.addWidget(self.AUNewUsernameLabel, 1, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUNewUsernameEdit, 1, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUPasswordLabel, 2, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUPasswordEdit, 2, 1, 1, 1) AddingUserTab.layout.addWidget(self.AURePasswordLabel, 3, 0, 1, 1) AddingUserTab.layout.addWidget(self.AURePasswordEdit, 3, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUNameLabel, 4, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUNameEdit, 4, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUFullNameLabel, 4, 2, 1, 1) AddingUserTab.layout.addWidget(self.AUFullNameEdit, 4, 3, 1, 1) AddingUserTab.layout.addWidget(self.AUEmailLabel, 5, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUEmailEdit, 5, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUInstLabel, 5, 2, 1, 1) AddingUserTab.layout.addWidget(self.AUInstComboBox, 5, 3, 1, 1) AddingUserTab.layout.addWidget(self.AUFeedBackLabel, 6, 0, 1, 3) AddingUserTab.layout.addWidget(self.AUSubmitButton, 6, 3, 1, 1) AddingUserTab.setLayout(AddingUserTab.layout) self.MainTabs.setCurrentWidget(AddingUserTab) #self.enableMenuItem(self.AddingUserTab, False) def submitAURequest(self): # check the password consistency if self.AUNewUsernameEdit.text() == "" or self.AUNameEdit.text( ) == "" or self.AUFullNameEdit.text() == "": self.AUFeedBackLabel.setText("key blank is empty") return if self.AUPasswordEdit.text() != self.AURePasswordEdit.text(): self.AUFeedBackLabel.setText("passwords are inconsistent") self.AUPasswordEdit.setText("") self.AURePasswordEdit.setText("") return try: InstituteInfo = retrieveWithConstraint( self.connection, "institute", description=str(self.AUInstComboBox.currentText())) InstName = getByColumnName( "institute", describeTable(self.connection, "institute"), InstituteInfo) TimeZone = getByColumnName( "timezone", describeTable(self.connection, "institute"), InstituteInfo) except: self.AUFeedBackLabel.setText( "Failed to extract institute info, try to reconnect to DB") Args = describeTable(self.connection, "people") Data = [] Data.append(self.AUNewUsernameEdit.text()) Data.append(self.AUNameEdit.text()) Data.append(self.AUFullNameEdit.text()) Data.append(self.AUEmailEdit.text()) Data.append(InstName[0]) Data.append(self.AUPasswordEdit.text()) Data.append(TimeZone[0]) Data.append(0) try: createNewUser(self.connection, Args, Data) self.AUFeedBackLabel.setText("Query submitted") self.AUFeedBackLabel.setStyleSheet("color:green") return except: print("submitFailed") return def updateProfile(self): pass ########################################################################## ## Functions for Adding Users (END) ########################################################################## ########################################################################## ## Functions for Institutes display ########################################################################## def displayInstitue(self): self.processing.append("InstituteDisplay") displayInstiTab = QWidget() # Add tabs self.MainTabs.addTab(displayInstiTab, "Institutes") displayInstiTab.layout = QGridLayout(self) dataList = ([describeInstitute(self.connection)] + retrieveAllInstitute(self.connection)) proxy = QtDBTableWidget(dataList, 0) lineEdit = QLineEdit() lineEdit.textChanged.connect(proxy.on_lineEdit_textChanged) view = QTableView() view.setSortingEnabled(True) comboBox = QComboBox() comboBox.addItems(["{0}".format(x) for x in dataList[0]]) comboBox.currentIndexChanged.connect( proxy.on_comboBox_currentIndexChanged) label = QLabel() label.setText("Regex Filter") view.setModel(proxy) view.setSelectionBehavior(QAbstractItemView.SelectRows) view.setSelectionMode(QAbstractItemView.MultiSelection) view.setEditTriggers(QAbstractItemView.NoEditTriggers) displayInstiTab.layout.addWidget(lineEdit, 0, 1, 1, 1) displayInstiTab.layout.addWidget(view, 1, 0, 1, 3) displayInstiTab.layout.addWidget(comboBox, 0, 2, 1, 1) displayInstiTab.layout.addWidget(label, 0, 0, 1, 1) displayInstiTab.setLayout(displayInstiTab.layout) self.MainTabs.setCurrentWidget(displayInstiTab) ########################################################################## ## Functions for Institutes display (END) ########################################################################## ########################################################################## ## Functions for Complaint submission ########################################################################## def fileComplaint(self): self.ComplaintTab = QWidget() # Add tabs self.MainTabs.addTab(self.ComplaintTab, "Complaint") self.ComplaintAction.setDisabled(True) self.ComplaintTab.layout = QGridLayout(self) ComplaintLabel = QLabel( '<font size="12"> Submit the complaint </font>') ComplaintLabel.setMaximumHeight(60) self.FCNameLabel = QLabel('Name:') self.FCNameEdit = QLineEdit('') self.FCNameEdit.setEchoMode(QLineEdit.Normal) TableInfo = describeTable(self.connection, "people") UserInfo = retrieveWithConstraint(self.connection, "people", username=self.TryUsername) ShortName = getByColumnName("name", TableInfo, UserInfo) if len(ShortName) > 0: self.FCNameEdit.setText(str(ShortName[0])) self.FCDateTimeLabel = QLabel('Date(local)') self.FCDateTimeEdit = QDateTimeEdit() self.FCDateTimeEdit.setDateTime(QDateTime.currentDateTime()) self.FCCommentLabel = QLabel('Comment:') self.FCCommentEdit = QTextEdit('') self.FCCommentEdit.setPlaceholderText("Your comment") self.FCFeedBackLabel = QLabel() self.FCSubmitButton = QPushButton('Submit') self.FCSubmitButton.clicked.connect(self.submitFCRequest) self.ComplaintTab.layout.addWidget(ComplaintLabel, 0, 0, 1, 4, Qt.AlignTop) self.ComplaintTab.layout.addWidget(self.FCNameLabel, 1, 0, 1, 1) self.ComplaintTab.layout.addWidget(self.FCNameEdit, 1, 1, 1, 1) self.ComplaintTab.layout.addWidget(self.FCDateTimeLabel, 1, 2, 1, 1) self.ComplaintTab.layout.addWidget(self.FCDateTimeEdit, 1, 3, 1, 1) self.ComplaintTab.layout.addWidget(self.FCCommentLabel, 2, 0, 1, 4, Qt.AlignLeft) self.ComplaintTab.layout.addWidget(self.FCCommentEdit, 3, 0, 6, 4) self.ComplaintTab.layout.addWidget(self.FCFeedBackLabel, 9, 0, 1, 2) self.ComplaintTab.layout.addWidget(self.FCSubmitButton, 9, 3, 1, 1) self.ComplaintTab.setLayout(self.ComplaintTab.layout) self.MainTabs.setCurrentWidget(self.ComplaintTab) def submitFCRequest(self): if self.FCNameEdit.text() == "" or self.FCCommentEdit.toPlainText( ) == "": self.FCFeedBackLabel.setText( "Please make sure the name/comment are filled") return Args = describeTable(self.connection, "complaint") Data = [] Data.append(self.FCDateTimeEdit.dateTime().toUTC().toString( "yyyy-dd-MM hh:mm:ss.z")) Data.append(self.FCCommentEdit.toPlainText()) Data.append(self.FCNameEdit.text()) print(Data) try: insertGenericTable(self.connection, "complaint", Args, Data) except: print("Failed to submit the text") return self.FCNameLabel.deleteLater() self.FCNameEdit.deleteLater() self.FCDateTimeLabel.deleteLater() self.FCDateTimeEdit.deleteLater() self.FCCommentLabel.deleteLater() self.FCCommentEdit.deleteLater() self.FCFeedBackLabel.deleteLater() self.FCSubmitButton.deleteLater() self.ComplaintTab.layout.removeWidget(self.FCNameLabel) self.ComplaintTab.layout.removeWidget(self.FCNameEdit) self.ComplaintTab.layout.removeWidget(self.FCDateTimeLabel) self.ComplaintTab.layout.removeWidget(self.FCDateTimeEdit) self.ComplaintTab.layout.removeWidget(self.FCCommentLabel) self.ComplaintTab.layout.removeWidget(self.FCCommentEdit) self.ComplaintTab.layout.removeWidget(self.FCFeedBackLabel) self.ComplaintTab.layout.removeWidget(self.FCSubmitButton) self.FCFeedBackLabel = QLabel("Submitted") self.FCFeedBackLabel.setStyleSheet("color:green") self.FCContinueButton = QPushButton('Continue') self.FCContinueButton.clicked.connect(self.recreateFC) self.ComplaintTab.layout.addWidget(self.FCFeedBackLabel, 1, 0, 1, 2) self.ComplaintTab.layout.addWidget(self.FCContinueButton, 1, 3, 1, 1) return def recreateFC(self): self.closeTab(self.MainTabs.currentIndex()) self.fileComplaint() ########################################################################## ## Functions for Complaint submission (END) ########################################################################## def createHeadLine(self): self.deactivateMenuBar() self.HeadBox = QGroupBox() self.HeadLayout = QHBoxLayout() UsernameLabel = QLabel("Username:"******"Password:"******"Host IP:") self.HostEdit = QLineEdit('128.146.38.1') self.HostEdit.setEchoMode(QLineEdit.Normal) self.HostEdit.setMinimumWidth(150) self.HostEdit.setMaximumHeight(30) DatabaseLabel = QLabel("Database:") self.DatabaseEdit = QLineEdit('SampleDB') self.DatabaseEdit.setEchoMode(QLineEdit.Normal) self.DatabaseEdit.setMinimumWidth(150) self.DatabaseEdit.setMaximumHeight(30) self.ConnectButton = QPushButton("&Connect to DB") self.ConnectButton.clicked.connect(self.connectDB) self.HeadLayout.addWidget(UsernameLabel) self.HeadLayout.addWidget(self.UsernameEdit) self.HeadLayout.addWidget(PasswordLabel) self.HeadLayout.addWidget(self.PasswordEdit) self.HeadLayout.addWidget(HostLabel) self.HeadLayout.addWidget(self.HostEdit) self.HeadLayout.addWidget(DatabaseLabel) self.HeadLayout.addWidget(self.DatabaseEdit) self.HeadLayout.addWidget(self.ConnectButton) self.HeadBox.setLayout(self.HeadLayout) self.mainLayout.addWidget(self.HeadBox, 0, 0, self.GroupBoxSeg[0], 1) def destroyHeadLine(self): self.HeadBox.deleteLater() self.mainLayout.removeWidget(self.HeadBox) def clearLogInfo(self): self.connection = "Offline" def connectedHeadLine(self): self.activateMenuBar() self.HeadBox.deleteLater() self.mainLayout.removeWidget(self.HeadBox) self.HeadBox = QGroupBox() self.HeadLayout = QHBoxLayout() WelcomeLabel = QLabel("Hello,{}!".format(self.TryUsername)) statusString, colorString = checkDBConnection(self.connection) DBStatusLabel = QLabel() DBStatusLabel.setText("Database:{}/{}".format(self.TryHostAddress, self.TryDatabase)) DBStatusValue = QLabel() DBStatusValue.setText(statusString) DBStatusValue.setStyleSheet(colorString) self.SwitchButton = QPushButton("&Switch DB") self.SwitchButton.clicked.connect(self.destroyHeadLine) self.SwitchButton.clicked.connect(self.clearLogInfo) self.SwitchButton.clicked.connect(self.createHeadLine) self.HeadLayout.addWidget(WelcomeLabel) self.HeadLayout.addStretch(1) self.HeadLayout.addWidget(DBStatusLabel) self.HeadLayout.addWidget(DBStatusValue) self.HeadLayout.addWidget(self.SwitchButton) self.HeadBox.setLayout(self.HeadLayout) self.HeadBox.setLayout(self.HeadLayout) self.mainLayout.addWidget(self.HeadBox, 0, 0, self.GroupBoxSeg[0], 1) def createMain(self): self.MainBodyBox = QGroupBox() self.mainbodylayout = QHBoxLayout() self.MainTabs = QTabWidget() self.MainTabs.setTabsClosable(True) self.MainTabs.tabCloseRequested.connect( lambda index: self.closeTab(index)) self.mainbodylayout.addWidget(self.MainTabs) self.MainBodyBox.setLayout(self.mainbodylayout) self.mainLayout.addWidget(self.MainBodyBox, sum(self.GroupBoxSeg[0:1]), 0, self.GroupBoxSeg[1], 1) def destroyMain(self): self.MainBodyBox.deleteLater() self.mainLayout.removeWidget(self.MainBodyBox) def createApp(self): self.AppOption = QGroupBox() self.StartLayout = QHBoxLayout() self.ResetButton = QPushButton("&Refresh") self.FinishButton = QPushButton("&Finish") self.FinishButton.setDefault(True) self.FinishButton.clicked.connect(self.closeWindow) self.StartLayout.addWidget(self.ResetButton) self.StartLayout.addWidget(self.FinishButton) self.StartLayout.addStretch(1) self.AppOption.setLayout(self.StartLayout) self.mainLayout.addWidget(self.AppOption, sum(self.GroupBoxSeg[0:2]), 0, self.GroupBoxSeg[2], 1) def destroyApp(self): self.AppOption.deleteLater() self.mainLayout.removeWidget(self.AppOption) def sendBackSignal(self): self.backSignal = True def connectDB(self): try: if isActive(self.connection): self.TryUsername = self.master.TryUsername self.TryHostAddress = self.master.TryHostAddress self.TryDatabase = self.master.TryDatabase self.connectedHeadLine() return self.TryUsername = self.UsernameEdit.text() self.TryPassword = self.PasswordEdit.text() self.TryHostAddress = self.HostEdit.text() self.TryDatabase = self.DatabaseEdit.text() if self.TryUsername == '': msg.information(None, "Error", "Please enter a valid username", QMessageBox.Ok) return self.connection = QtStartConnection(self.TryUsername, self.TryPassword, self.TryHostAddress, self.TryDatabase) if isActive(self.connection): self.connectedHeadLine() except Exception as err: print("Error in connecting to database, {}".format(repr(err))) def syncDB(self): pass def changeDBList(self): self.DBNames = DBNames[str(self.HostName.currentText())] self.DatabaseCombo.clear() self.DatabaseCombo.addItems(self.DBNames) self.DatabaseCombo.setCurrentIndex(0) def closeTab(self, index): self.releaseAction(self.MainTabs.tabText(index)) self.MainTabs.removeTab(index) def releaseAction(self, text): if text == "Adding User": self.AddUserAction.setDisabled(False) return if text == "Complaint": self.ComplaintAction.setDisabled(False) return if text == "Send Package": self.sendPackAction.setDisabled(False) return if text == "Receive Package": self.receivePackAction.setDisabled(False) return if text == "Insert Image": self.InsertImgAction.setDisabled(False) return def closeWindow(self): self.close() self.release() def occupied(self): self.master.DBConsoleButton.setDisabled(True) def release(self): self.master.DBConsoleButton.setDisabled(False) def closeEvent(self, event): #Fixme: strict criterias for process checking should be added here: #if self.ProcessingTest == True: # QMessageBox.critical(self, 'Critical Message', 'There is running process, can not close!') # event.ignore() reply = QMessageBox.question( self, 'Window Close', 'Are you sure you want to exit, all unsubmitted content will be lost?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: print('DB console terminated') event.accept() else: event.ignore()
class FilterConfigurationWindow(QWidget): """ The filter configuration widget is used to collect filter criteria from an analyst to apply to a table. """ def __init__(self): super().__init__() self.setGeometry(50, 50, 474, 664) self.setWindowTitle("Filter Configuration") # The filter criteria will read all the filter input from a user to be applied to the entry table. self.filter_criteria = dict() self.filter_criteria['Keywords'] = set() self.filter_criteria['Creator'] = set() self.filter_criteria['Event Type'] = set() self.filter_criteria['Timestamp'] = [None] * 2 self.ui() # The ui method is used to generate the window def ui(self): # Creating layout to store widgets self.gridLayout = QGridLayout(self) # Creating and positioning start timestamp self.start_timestamp_edit = QDateTimeEdit(self) self.start_timestamp_edit.setCalendarPopup(True) self.gridLayout.addWidget(self.start_timestamp_edit, 10, 1, 1, 1) "Creating a group for the creator buttons so that we don't need an " \ "event handler for each button" \ self.creator_button_group = QButtonGroup() self.creator_red_button = QRadioButton('red', self) self.gridLayout.addWidget(self.creator_red_button, 3, 1, 1, 1) self.creator_blue_button = QRadioButton('blue', self) self.gridLayout.addWidget(self.creator_blue_button, 4, 1, 1, 1) self.creator_white_button = QRadioButton('white', self) self.gridLayout.addWidget(self.creator_white_button, 5, 1, 1, 1) self.creator_button_group.addButton(self.creator_red_button) self.creator_button_group.addButton(self.creator_blue_button) self.creator_button_group.addButton(self.creator_white_button) self.creator_button_group.setExclusive(False) self.creator_button_group.buttonClicked.connect( self.creator_button_group_clicked) self.start_timestamp_label = QLabel('Start Timestamp:', self) self.start_timestamp_label.setObjectName(u"startTimestampLabel") font = QFont() font.setPointSize(16) self.start_timestamp_label.setFont(font) self.gridLayout.addWidget(self.start_timestamp_label, 10, 0, 1, 1) self.end_timestamp_label = QLabel('End Timestamp:', self) self.end_timestamp_label.setFont(font) self.gridLayout.addWidget(self.end_timestamp_label, 12, 0, 1, 1) self.apply_button = QPushButton('Apply Filter', self) self.gridLayout.addWidget(self.apply_button, 13, 0, 1, 1) self.apply_button.clicked.connect(self.apply_button_clicked) self.lineEdit = QLineEdit(self) self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1) self.filterConfigurationLabel = QLabel('Filter Configuration', self) font1 = QFont() font1.setPointSize(17) font1.setBold(True) font1.setWeight(75) self.filterConfigurationLabel.setFont(font1) self.gridLayout.addWidget(self.filterConfigurationLabel, 0, 0, 1, 1) self.event_type_button_group = QButtonGroup() self.event_red_button = QRadioButton('red', self) self.event_red_button.setAutoExclusive(False) self.gridLayout.addWidget(self.event_red_button, 6, 1, 1, 1) self.event_blue_button = QRadioButton('blue', self) self.event_blue_button.setAutoExclusive(False) self.gridLayout.addWidget(self.event_blue_button, 7, 1, 1, 1) self.event_white_button = QRadioButton('white', self) self.event_white_button.setAutoExclusive(False) self.gridLayout.addWidget(self.event_white_button, 8, 1, 1, 1) self.event_type_button_group.addButton(self.event_red_button) self.event_type_button_group.addButton(self.event_blue_button) self.event_type_button_group.addButton(self.event_white_button) self.event_type_button_group.setExclusive(False) self.event_type_button_group.buttonClicked.connect( self.event_type_button_group_clicked) self.end_timestamp_edit = QDateTimeEdit(self) self.end_timestamp_edit.setCalendarPopup(True) self.gridLayout.addWidget(self.end_timestamp_edit, 12, 1, 1, 1) self.event_type_label = QLabel('Source Type', self) self.event_type_label.setFont(font) self.gridLayout.addWidget(self.event_type_label, 6, 0, 1, 1) self.creator_label = QLabel('Source:', self) self.creator_label.setFont(font) self.gridLayout.addWidget(self.creator_label, 3, 0, 1, 1) # Handling click events for the creator buttons def creator_button_group_clicked(self): for btn in self.creator_button_group.buttons(): # If button is selected we want to add it's label to the criteria (e.g. Red, White, Blue) if btn.isChecked(): self.filter_criteria['Creator'].add(btn.text()) # If user deselects a button we want to remove it from the filter list. elif not btn.isChecked() and btn.text( ) in self.filter_criteria['Creator']: self.filter_criteria['Creator'].remove(btn.text()) print(self.filter_criteria['Creator']) # Handling events for the event type button group def event_type_button_group_clicked(self): for btn in self.event_type_button_group.buttons(): # If button is selected we want to add it's label to the criteria (e.g. Red, White, Blue) if btn.isChecked(): self.filter_criteria['Event Type'].add(btn.text()) # If user deselects a button we want to remove it from the filter list. elif not btn.isChecked() and btn.text( ) in self.filter_criteria['Event Type']: self.filter_criteria['Event Type'].remove(btn.text()) # #Handling apply button event def apply_button_clicked(self): if self.lineEdit.text() != '': self.filter_criteria['Keywords'] = set( self.lineEdit.text().split()) self.filter_criteria["Timestamp"][0] = self.start_timestamp_edit.text() self.filter_criteria["Timestamp"][1] = self.end_timestamp_edit.text() self.close()