Example #1
0
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())
Example #4
0
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()
Example #6
0
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(
            " &nbsp;<font color='red' >📍&nbsp;</font>:%s %s %s <br /> <font color='#FF8C00' >&nbsp;➤&nbsp;</font>:%s <br /> &nbsp;"
            "<font color='#FF4500' >☎&nbsp;</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 = "&nbsp;&nbsp;&nbsp;&nbsp;"
        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))
Example #7
0
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
Example #8
0
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())
Example #9
0
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)
Example #10
0
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(
        #     " &nbsp;<font color='red' >📍&nbsp;</font>:%s %s %s <br /> <font color='#FF8C00' >&nbsp;➤&nbsp;</font>:%s <br /> &nbsp;"
        #     "<font color='#FF4500' >☎&nbsp;</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
Example #11
0
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
Example #13
0
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)
Example #14
0
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, "提示", "请输入正确的目的地!")
Example #15
0
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 = "&nbsp;&nbsp;&nbsp;&nbsp;"
        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>")
Example #16
0
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)
Example #17
0
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()
Example #18
0
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()
Example #19
0
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()