class Ui_MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.transprot_mass =[] self.netprot_mass =[] self.filtering_is_on = 0 grid = QGridLayout() self.setLayout(grid) self.IP_list = IP_list(self) self.TransProt_list = TransProt_list(self) self.NetProt_list = NetProt_list(self) self.setWindowTitle('Гамма') self.setWindowIcon(QIcon('допочки\Gamma_200x200.png')) self.resize(740, 830) self.to_center() self.centralwidget = QWidget(self) self.tabWidget = QTabWidget(self.centralwidget) self.tabWidget.setGeometry(QRect(20, 20, 700, 750)) self.tab = QWidget() grid.addWidget(self.tab) self.cb_time = QCheckBox(self.tab) self.cb_time.setGeometry(QRect(360, 130, 120, 20)) self.cb_time.setText("Фильтр по времени") self.cb_prot = QCheckBox(self.tab) self.cb_prot.setGeometry(QRect(20, 130, 140, 20)) self.cb_prot.setText("Фильтр по протоколам") self.cb_addr = QCheckBox(self.tab) self.cb_addr.setGeometry(QRect(360, 290, 130, 20)) self.cb_addr.setText("Фильтр по IP-адресам") self.dt_beg = QDateTimeEdit(self.tab) self.dt_beg.setGeometry(QRect(360, 210, 150, 20)) self.dt_beg.setDateTime(QDateTime.currentDateTime()) self.dt_beg.setDisplayFormat("dd.MM.yyyy H:mm:ss.zzz") self.dt_beg.setCalendarPopup(True) self.dt_beg.setToolTip('Выбрать начальное время (>=)') self.dt_beg.setEnabled(False) self.dt_end = QDateTimeEdit(self.tab) self.dt_end.setGeometry(QRect(520, 210, 150, 20)) self.dt_end.setDateTime(QDateTime.currentDateTime()) self.dt_end.setDisplayFormat("dd.MM.yyyy H:mm:ss.zzz") self.dt_end.setCalendarPopup(True) self.dt_end.setToolTip('Выбрать конечное время (<)') self.dt_end.setEnabled(False) self.dt_beg.dateChanged.connect(lambda dc: self.date_changed(1)) self.dt_end.dateChanged.connect(lambda dc: self.date_changed(2)) #self.l_input_dir = QLabel(self.tab) #self.l_input_dir.setGeometry(QRect(102, 50, 180, 15)) #self.l_input_dir.setText("Выберите директорию с файлами") #self.l_or = QLabel(self.tab) #self.l_or.setGeometry(QRect(340, 50, 21, 16)) #self.l_or.setText("ИЛИ") self.l_input_file = QLabel(self.tab) self.l_input_file.setGeometry(QRect(300, 50, 90, 15)) self.l_input_file.setText("Выберите файлы") self.l_transpr = QLabel(self.tab) self.l_transpr.setGeometry(QRect(50, 190, 180, 16)) self.l_transpr.setEnabled(False) self.l_transpr.setText("Протоколы Транспортного уровня") self.l_netpr = QLabel(self.tab) self.l_netpr.setGeometry(QRect(50, 290, 180, 16)) self.l_netpr.setEnabled(False) self.l_netpr.setText("Протоколы Сетевого уровня") self.l_beg = QLabel(self.tab) self.l_beg.setGeometry(QRect(390, 190, 60, 16)) self.l_beg.setEnabled(False) self.l_beg.setText("Начиная с..") self.l_end = QLabel(self.tab) self.l_end.setGeometry(QRect(560, 190, 80, 16)) self.l_end.setEnabled(False) self.l_end.setText("Оканчивая до..") self.l_name = QLabel(self.tab) self.l_name.setGeometry(QRect(300, 450, 96, 16)) self.l_name.setText("Как назвать файл?") self.l_filt = QLabel(self.tab) self.l_filt.setGeometry(QRect(300, 10, 91, 16)) self.l_filt.setText("Выборка пакетов") self.line = QFrame(self.tab) self.line.setGeometry(QRect(0, 110, 690, 15)) self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.line_2 = QFrame(self.tab) self.line_2.setGeometry(QRect(340, 120, 15, 300)) self.line_2.setFrameShape(QFrame.VLine) self.line_2.setFrameShadow(QFrame.Sunken) self.line_3 = QFrame(self.tab) self.line_3.setGeometry(QRect(0, 420, 690, 15)) self.line_3.setFrameShape(QFrame.HLine) self.line_3.setFrameShadow(QFrame.Sunken) #self.le_dir = QLineEdit(self.tab) #self.le_dir.setGeometry(QRect(110, 80, 211, 20)) #self.le_dir.setEnabled(False) #self.le_dir.setReadOnly(True) self.le_file = QLineEdit(self.tab) self.le_file.setGeometry(QRect(250, 80, 211, 20)) #self.le_file.setEnabled(False) self.le_file.setReadOnly(True) self.le_name = QLineEdit(self.tab) self.le_name.setGeometry(QRect(250, 480, 231, 20)) self.pt_transpr = QPlainTextEdit(self.tab) self.pt_transpr.setGeometry(QRect(50, 210, 271, 71)) self.pt_transpr.setEnabled(False) self.pt_transpr.setReadOnly(True) self.pt_netpr = QPlainTextEdit(self.tab) self.pt_netpr.setGeometry(QRect(50, 320, 271, 71)) self.pt_netpr.setEnabled(False) self.pt_netpr.setReadOnly(True) self.pt_addr = QPlainTextEdit(self.tab) self.pt_addr.setGeometry(QRect(390, 320, 271, 71)) self.pt_addr.setEnabled(False) self.pt_log = QPlainTextEdit(self.tab) self.pt_log.setGeometry(QRect(20, 610, 651, 101)) self.pt_log.setReadOnly(True) self.progressBar = QProgressBar(self.tab) self.progressBar.setGeometry(QRect(20, 580, 651, 20)) self.progressBar.setFormat("%v" + "%") self.progressBar.setMaximum(100) self.progressBar.setValue(0) #self.pb_dir = QPushButton(self.tab) #self.pb_dir.setGeometry(QRect(80, 80, 21, 20)) #self.pb_dir.setIcon(QIcon('допочки\_folder.png')) #self.pb_dir.clicked.connect(lambda gd: self.get_directory(1)) self.pb_file = QPushButton(self.tab) self.pb_file.setGeometry(QRect(220, 80, 21, 20)) self.pb_file.setIcon(QIcon('допочки\_folder.png')) self.pb_file.clicked.connect(lambda gf: self.get_files(1)) self.pb_time = QPushButton(self.tab) self.pb_time.setGeometry(QRect(480, 240, 71, 20)) self.pb_time.setToolTip('Добавить ещё временной отрезок') self.pb_time.setEnabled(False) self.pb_time.setText("Ещё!") self.pb_transpr = QPushButton(self.tab) self.pb_transpr.setGeometry(QRect(20, 210, 21, 20)) self.pb_transpr.setToolTip('Выбрать протоколы Транспортного уровня') self.pb_transpr.setIcon(QIcon('допочки\_blank.png')) self.pb_transpr.setEnabled(False) self.pb_transpr.clicked.connect(self.TransProt_list.exec) self.pb_netpr = QPushButton(self.tab) self.pb_netpr.setGeometry(QRect(20, 320, 21, 20)) self.pb_netpr.setToolTip('Выбрать протоколы Сетевого уровня') self.pb_netpr.setIcon(QIcon('допочки\_blank.png')) self.pb_netpr.setEnabled(False) self.pb_netpr.clicked.connect(self.NetProt_list.exec) self.pb_addr = QPushButton(self.tab) self.pb_addr.setGeometry(QRect(530, 290, 132, 20)) self.pb_addr.setText('Редактировать список') self.pb_addr.setEnabled(False) self.pb_addr.clicked.connect(self.IP_list.exec) self.pb_name = QPushButton(self.tab) self.pb_name.setGeometry(QRect(220, 480, 21, 20)) self.pb_name.setIcon(QIcon('допочки\_folder.png')) self.pb_name.clicked.connect(lambda ed: self.extract_to_directory(1)) self.pb_start = QPushButton(self.tab) self.pb_start.setGeometry(QRect(220, 510, 261, 41)) self.pb_start.setText("Начать выборку") self.pb_start.clicked.connect(self.do_it_motherFucker) #self.radiobutton = QRadioButton(self.tab) #self.radiobutton.setGeometry(QRect(84, 48, 20, 20)) #self.radiobutton_2 = QRadioButton(self.tab) #self.radiobutton_2.setGeometry(QRect(424, 48, 20, 20)) #self.radiobutton.raise_() #self.radiobutton_2.raise_() self.cb_time.raise_() self.cb_prot.raise_() self.cb_addr.raise_() self.dt_beg.raise_() self.dt_end.raise_() #self.l_input_dir.raise_() #self.l_or.raise_() self.l_input_file.raise_() self.l_transpr.raise_() self.l_netpr.raise_() self.l_beg.raise_() self.l_end.raise_() self.l_name.raise_() self.l_filt.raise_() self.line.raise_() self.line_2.raise_() self.line_3.raise_() #self.le_dir.raise_() self.le_file.raise_() self.le_name.raise_() self.pt_transpr.raise_() self.pt_netpr.raise_() self.pt_addr.raise_() self.pt_log.raise_() self.progressBar.raise_() #self.pb_dir.raise_() self.pb_file.raise_() self.pb_time.raise_() self.pb_transpr.raise_() self.pb_netpr.raise_() self.pb_addr.raise_() self.pb_name.raise_() self.pb_start.raise_() self.setCentralWidget(self.centralwidget) self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.tabWidget.addTab(self.tab, "") self.cb_time.clicked['bool'].connect(self.dt_beg.setEnabled) self.cb_time.clicked['bool'].connect(self.dt_end.setEnabled) self.cb_time.clicked['bool'].connect(self.l_beg.setEnabled) self.cb_time.clicked['bool'].connect(self.l_end.setEnabled) self.cb_prot.clicked['bool'].connect(self.l_transpr.setEnabled) self.cb_prot.clicked['bool'].connect(self.l_netpr.setEnabled) self.cb_prot.clicked['bool'].connect(self.pt_transpr.setEnabled) self.cb_prot.clicked['bool'].connect(self.pt_netpr.setEnabled) self.cb_prot.clicked['bool'].connect(self.pb_transpr.setEnabled) self.cb_prot.clicked['bool'].connect(self.pb_netpr.setEnabled) self.cb_addr.clicked['bool'].connect(self.pt_addr.setEnabled) self.cb_addr.clicked['bool'].connect(self.pb_addr.setEnabled) #####------------------------------2_TAB self.tab_2 = QWidget() self.tabWidget.addTab(self.tab_2, "") self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), ("II работа с файлами")) self.l_merge = QLabel(self.tab_2) self.l_merge.setGeometry(QRect(300, 10, 180, 16)) self.l_merge.setText("Объединение файлов") self.l_arch = QLabel(self.tab_2) self.l_arch.setGeometry(QRect(300, 250, 180, 16)) self.l_arch.setText("Архивирование файлов") #self.radiobutton_3 = QRadioButton(self.tab_2) #self.radiobutton_3.setGeometry(QRect(84, 48, 20, 20)) #self.radiobutton_4 = QRadioButton(self.tab_2) #self.radiobutton_4.setGeometry(QRect(424, 48, 20, 20)) #self.l_input_dir2 = QLabel(self.tab_2) #self.l_input_dir2.setGeometry(QRect(102, 50, 180, 15)) #self.l_input_dir2.setText("Выберите директорию с файлами") #self.l_or2 = QLabel(self.tab_2) #self.l_or2.setGeometry(QRect(340, 50, 21, 16)) #self.l_or2.setText("ИЛИ") self.l_input_file2 = QLabel(self.tab_2) self.l_input_file2.setGeometry(QRect(102, 50, 180, 15))#442, 50, 90, 15)) self.l_input_file2.setText("Выберите файлы") self.l_name2 = QLabel(self.tab_2) self.l_name2.setGeometry(QRect(442, 50, 180, 15))#280, 140, 180, 16)) self.l_name2.setText("Куда сохранить результат?") self.l_ciph2 = QLabel(self.tab_2) self.l_ciph2.setGeometry(QRect(84, 298, 180, 15)) self.l_ciph2.setText("Убрать шифрованный трафик") self.l_arch2 = QLabel(self.tab_2) self.l_arch2.setGeometry(QRect(424, 298, 180, 15)) self.l_arch2.setText("Заархивировать файлы") #self.le_dir2 = QLineEdit(self.tab_2) #self.le_dir2.setGeometry(QRect(110, 80, 211, 20)) #self.le_dir2.setEnabled(False) self.le_file2 = QLineEdit(self.tab_2) self.le_file2.setGeometry(QRect(110, 80, 211, 20))#450, 80, 211, 20)) self.le_file2.setReadOnly(True) self.le_name2 = QLineEdit(self.tab_2) self.le_name2.setGeometry(QRect(450, 80, 211, 20))#260, 170, 180, 20)) #self.pb_dir2 = QPushButton(self.tab_2) #self.pb_dir2.setGeometry(QRect(80, 80, 21, 20)) #self.pb_dir2.setIcon(QIcon('допочки\_folder.png')) #self.pb_dir2.clicked.connect(lambda gd: self.get_directory(2)) self.pb_file2 = QPushButton(self.tab_2) self.pb_file2.setGeometry(QRect(80, 80, 21, 20))#420, 80, 21, 20)) self.pb_file2.setIcon(QIcon('допочки\_folder.png')) self.pb_file2.clicked.connect(lambda gf: self.get_files(2)) self.pb_name2 = QPushButton(self.tab_2) self.pb_name2.setGeometry(QRect(420, 80, 21, 20))#230, 170, 21, 20)) self.pb_name2.setIcon(QIcon('допочки\_folder.png')) self.pb_name2.clicked.connect(lambda ed: self.extract_to_directory(2)) self.pb_merge = QPushButton(self.tab_2) self.pb_merge.setGeometry(QRect(270, 170, 160, 20)) self.pb_merge.setText("Объединить") self.pb_merge.clicked.connect(self.merge_it_motherFucker) self.line_4 = QFrame(self.tab_2) self.line_4.setGeometry(QRect(0, 280, 690, 15)) self.line_4.setFrameShape(QFrame.HLine) self.line_4.setFrameShadow(QFrame.Sunken) self.line_5 = QFrame(self.tab_2) self.line_5.setGeometry(QRect(0, 580, 690, 15)) self.line_5.setFrameShape(QFrame.HLine) self.line_5.setFrameShadow(QFrame.Sunken) self.pt_log2 = QPlainTextEdit(self.tab_2) self.pt_log2.setGeometry(QRect(20, 610, 651, 101)) self.pt_log2.setReadOnly(True) self.graphicsView = QGraphicsView(self.tab_2) self.graphicsView.setGeometry(QRect(0, 330, 714, 277)) self.scene = QGraphicsScene() self.graphicsView.setScene(self.scene) self.scene.addPixmap(QPixmap('допочки\_in_working_3.png')) self.l_merge.raise_() self.l_arch.raise_() #self.l_input_dir2.raise_() #self.l_or2.raise_() self.l_input_file2.raise_() self.l_name2.raise_() #self.radiobutton_3.raise_() #self.radiobutton_4.raise_() #self.pb_dir2.raise_() self.pb_file2.raise_() self.pb_name2.raise_() #self.le_dir2.raise_() self.le_file2.raise_() self.le_name2.raise_() self.line_4.raise_() self.line_5.raise_() self.pt_log2.raise_() #####------------------------------2_TAB #####------------------------------3_TAB self.tab_3 = QWidget() self.tabWidget.addTab(self.tab_3, "") self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), ("III Проверка на аномальную активность")) self.tab_3.setEnabled(False) self.l_filt3 = QLabel(self.tab_3) self.l_filt3.setGeometry(QRect(300, 10, 91, 16)) self.l_filt3.setText("Выборка пакетов") self.l_input_file3 = QLabel(self.tab_3) self.l_input_file3.setGeometry(QRect(300, 50, 90, 15)) self.l_input_file3.setText("Выберите файлы") self.pb_file3 = QPushButton(self.tab_3) self.pb_file3.setGeometry(QRect(220, 80, 21, 20)) self.pb_file3.setIcon(QIcon('допочки\_folder.png')) self.pb_file3.clicked.connect(lambda gf: self.get_files(3)) self.le_file3 = QLineEdit(self.tab_3) self.le_file3.setGeometry(QRect(250, 80, 211, 20)) self.le_file3.setReadOnly(True) self.pb_graphy = QPushButton(self.tab_3) self.pb_graphy.setGeometry(QRect(270, 170, 160, 20)) self.pb_graphy.setText("Построить граф") #self.pb_graphy.clicked.connect(self.graph_it) #self.label_6 = QLabel(self.tab_3) #self.pixmap = QPixmap('допочки\_in_working_1.png') #self.label_6.setPixmap(self.pixmap) self.l_filt3.raise_() self.l_input_file3.raise_() self.pb_file3.raise_() self.le_file3.raise_() #####------------------------------3_TAB #####----------------------------IN_WORK self.tab_4 = QWidget() self.tabWidget.addTab(self.tab_4, "") self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), ("...IV visualization...")) self.tab_4.setEnabled(False) self.label_7 = QLabel(self.tab_4) self.pixmap_2 = QPixmap('допочки\_in_working_2.png') self.label_7.setPixmap(self.pixmap_2) #####----------------------------IN_WORK self.tabWidget.setCurrentIndex(0) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), ("I выборка пакетов")) QMetaObject.connectSlotsByName(self) self.show() def closeEvent(self, event): reply = QMessageBox.question(self, 'Ща закроется всё', "Ты чо, реально хочешь выйти?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() def to_center(self): qr = self.frameGeometry() qr.moveCenter(QDesktopWidget().availableGeometry().center()) self.move(qr.topLeft()) def get_directory(self, gd): if gd == 1: result = QFileDialog.getExistingDirectory() #self.le_dir.setText(result) self.le_file.setDisabled(True) #self.le_dir.setEnabled(True) #self.radiobutton_2.setChecked(False) #self.radiobutton.setChecked(True) else: result = QFileDialog.getExistingDirectory() #self.le_dir2.setText(result) self.le_file2.setDisabled(True) #self.le_dir2.setEnabled(True) #self.radiobutton_4.setChecked(False) #self.radiobutton_3.setChecked(True) def get_files(self, gf): if gf == 1: result, bullshit = QFileDialog.getOpenFileNames(self, "Выберите pcap-файлы", getcwd(), "files (*.pcap *.pcapng)") #self.le_dir.setDisabled(True) self.le_file.setEnabled(True) #self.radiobutton.setChecked(False) #self.radiobutton_2.setChecked(True) if len(result): self.le_file.setText(", ".join(result)) elif gf == 3: result, bullshit = QFileDialog.getOpenFileNames(self, "Выберите pcap-файлы", getcwd(), "files (*.pcap *.pcapng)") #self.le_dir.setDisabled(True) self.le_file3.setEnabled(True) #self.radiobutton.setChecked(False) #self.radiobutton_2.setChecked(True) if len(result): self.le_file3.setText(", ".join(result)) else: result, bullshit = QFileDialog.getOpenFileNames(self, "Выберите pcap-файлы", getcwd(), "files (*.pcap *.pcapng)") #self.le_dir2.setDisabled(True) self.le_file2.setEnabled(True) #self.radiobutton_3.setChecked(False) #self.radiobutton_4.setChecked(True) if len(result): self.le_file2.setText(", ".join(result)) def date_changed(self, dc): if dc == 1: self.dt_end.setMinimumDateTime(QDateTime(self.dt_beg.dateTime())) else: self.dt_beg.setMaximumDateTime(QDateTime(self.dt_end.dateTime())) def extract_to_directory(self, ed): if ed == 1: result, bullshit =QFileDialog.getSaveFileName(self, "Сохранить файл", getcwd(), "files (*.pcap *.pcapng)") self.le_name.setText(result) else: result, bullshit =QFileDialog.getSaveFileName(self, "Сохранить файл", getcwd(), "files (*.pcap *.pcapng)") self.le_name2.setText(result) def do_it_motherFucker(self): if self.filtering_is_on == 0: #if ((not self.radiobutton.isChecked() and not self.radiobutton_2.isChecked())\ # or (self.radiobutton.isChecked() and self.le_dir.text() == '')\ # or (self.radiobutton_2.isChecked() and self.le_file.text() == ''))\ # and self.le_name.text() == '': if self.le_file.text() == '' and self.le_name.text() == '': self.pt_log.appendPlainText(" " + "Какие файлы обработать? Куда сохранить? Такая неопределённость..") #elif (not self.radiobutton.isChecked() and not self.radiobutton_2.isChecked()) or (self.radiobutton.isChecked() and self.le_dir.text() == '') or (self.radiobutton_2.isChecked() and self.le_file.text() == ''): elif self.le_file.text() == '': self.pt_log.appendPlainText(" " + "Какие файлы обработать?") elif self.le_name.text() == '': self.pt_log.appendPlainText(" " + "Куда сохранить?") else: self.filtering_is_on = 1 # эти пиздецы в идеале нужно заменить на что-нибудь адекватное self.count_for_pr_b = 0 # эти пиздецы в идеале нужно заменить на что-нибудь адекватное self.progressBar.setValue(0) self.pb_start.setText("Остановить выборку") #my_directory = self.le_dir.text() pcap_files_in = self.le_file.text() pcap_file_out = self.le_name.text() per_quest = 0 per_beg = '' per_end = '' prot_quest = 0 net_prot = 0 trans_prot = 0 appl_prot = 0 ## ip_quest = 0 netprot_mass = [] transprot_mass = [] addr_mass = [] if (pcap_file_out.endswith(".pcap") or pcap_file_out.endswith(".pcapng")) == False: pcap_file_out = pcap_file_out + ".pcap" self.pt_log.appendPlainText("Сохранить в:") self.pt_log.appendPlainText(" " + pcap_file_out) #if self.radiobutton.isChecked(): # onlyfiles = [my_directory + '/' + f for f in listdir(my_directory) if # f.endswith(".pcap") or f.endswith(".pcapng") and isfile(join(my_directory, f))] # self.for_pr_b = len(onlyfiles) # # self.pt_log.appendPlainText("Выбрана директория:") # self.pt_log.appendPlainText(" " + self.le_dir.text()) # self.pt_log.appendPlainText("С pcap-файлами:") # for file in onlyfiles: # bullshit, fname = file.rsplit('/', 1) # self.pt_log.appendPlainText(" " + fname) #elif self.radiobutton_2.isChecked(): onlyfiles = pcap_files_in.split(', ') self.for_pr_b = len(onlyfiles) self.pt_log.appendPlainText("Выбраны pcap-файлы:") for file in onlyfiles: self.pt_log.appendPlainText(" " + (file)) if self.cb_addr.isChecked() and self.pt_addr.toPlainText() != '': ip_quest = 1 addr_mass = self.pt_addr.toPlainText().splitlines() if self.cb_time.isChecked(): per_quest = 1 per_beg = self.dt_beg.dateTime() per_end = self.dt_end.dateTime() if self.cb_prot.isChecked(): prot_quest = 1 transprot_mass = self.transprot_mass netprot_mass = self.netprot_mass if self.pt_transpr.toPlainText() != '': trans_prot = 1 if self.pt_netpr.toPlainText() != '': net_prot = 1 #self.radiobutton.setDisabled(True) #self.radiobutton_2.setDisabled(True) #self.l_input_dir.setDisabled(True) #self.l_or.setDisabled(True) self.l_input_file.setDisabled(True) #self.pb_dir.setDisabled(True) self.pb_file.setDisabled(True) #self.le_dir.setDisabled(True) self.le_file.setDisabled(True) self.cb_time.setDisabled(True) self.cb_prot.setDisabled(True) self.cb_addr.setDisabled(True) self.l_transpr.setDisabled(True) self.l_netpr.setDisabled(True) self.l_beg.setDisabled(True) self.l_end.setDisabled(True) self.l_name.setDisabled(True) self.l_filt.setDisabled(True) self.le_name.setDisabled(True) self.dt_beg.setDisabled(True) self.dt_end.setDisabled(True) self.pt_transpr.setDisabled(True) self.pt_netpr.setDisabled(True) self.pt_addr.setDisabled(True) self.pb_time.setDisabled(True) self.pb_transpr.setDisabled(True) self.pb_netpr.setDisabled(True) self.pb_addr.setDisabled(True) self.pb_name.setDisabled(True) self.worker = WorkerThread(onlyfiles, pcap_file_out, per_quest, per_beg, per_end, prot_quest, net_prot, netprot_mass, trans_prot, transprot_mass, appl_prot, ip_quest, addr_mass) self.worker.callback_received.connect(self.append_to_log) self.worker.start() self.pt_log.appendPlainText("") self.pt_log.appendPlainText("В работе:") elif self.filtering_is_on == 1: self.worker.terminate() self.pt_log.appendPlainText("") self.pt_log.appendPlainText("Работа прервана") self.pt_log.appendPlainText("") self.pt_log.appendPlainText("") self.go_to_starting_set() def append_to_log(self, x): self.count_for_pr_b += 1 self.pt_log.appendPlainText("") self.pt_log.appendPlainText(x) self.progressBar.setValue(self.count_for_pr_b * 100 / (self.for_pr_b + 1)) if self.progressBar.value() == 100: self.pt_log.appendPlainText("") self.pt_log.appendPlainText("") self.go_to_starting_set() def go_to_starting_set(self): self.filtering_is_on = 0 self.pb_start.setText("Начать выборку") #self.radiobutton.setDisabled(False) #self.radiobutton_2.setDisabled(False) #self.l_input_dir.setDisabled(False) #self.l_or.setDisabled(False) self.l_input_file.setDisabled(False) #self.pb_dir.setDisabled(False) self.pb_file.setDisabled(False) #self.le_dir.setDisabled(False) self.le_file.setDisabled(False) self.cb_time.setDisabled(False) self.cb_prot.setDisabled(False) self.cb_addr.setDisabled(False) self.l_name.setDisabled(False) self.l_filt.setDisabled(False) self.le_name.setDisabled(False) self.pb_name.setDisabled(False) if self.cb_time.isChecked(): self.dt_beg.setEnabled(True) self.dt_end.setEnabled(True) self.l_beg.setEnabled(True) self.l_end.setEnabled(True) if self.cb_prot.isChecked(): self.l_transpr.setEnabled(True) self.l_netpr.setEnabled(True) self.pt_transpr.setEnabled(True) self.pt_netpr.setEnabled(True) self.pb_transpr.setEnabled(True) self.pb_netpr.setEnabled(True) if self.cb_addr.isChecked(): self.pt_addr.setEnabled(True) self.pb_addr.setEnabled(True) def merge_it_motherFucker(self): #if self.radiobutton_3.isChecked(): # self.pt_log2.appendPlainText("Выбрана директория с pcap-файлами:") # self.pt_log2.appendPlainText(" " + self.le_dir2.text()) # self.pt_log2.appendPlainText('Просматриваем "{}"...'.format(self.le_dir2.text())) # onlyfiles = [self.le_dir2.text() + '/' + f for f in listdir(self.le_dir2.text()) if # f.endswith(".pcap") or f.endswith(".pcapng") and isfile(join(self.le_dir2.text(), f))] # self.pt_log2.appendPlainText(str(onlyfiles)) #elif self.radiobutton_4.isChecked(): self.pt_log2.appendPlainText("Выбраны pcap-файлы:") self.pt_log2.appendPlainText(" " + self.le_file2.text()) onlyfiles = self.le_file2.text().split(', ') self.pt_log2.appendPlainText('Работаем с "{}"...'.format(onlyfiles)) merge_file_out = self.le_name2.text() if (merge_file_out.endswith(".pcap") or merge_file_out.endswith(".pcapng")) == False: merge_file_out = merge_file_out + ".pcap" self.pt_log2.appendPlainText("Сохранить в:") self.pt_log2.appendPlainText(" " + merge_file_out) self.pt_log2.appendPlainText("") merge.mergecap(onlyfiles, merge_file_out)
class Setting(QWidget, Ui_widget_setting): signal_core_number = pyqtSignal(int) signal_suspend_status = pyqtSignal(bool) signal_waiting_min = pyqtSignal(int) signal_schedule_status = pyqtSignal(bool) signal_cancel_plan = pyqtSignal(str) signal_change_language = pyqtSignal(str) def __init__(self, suspend, cores, schedule_status, waiting_min, language): super().__init__() self.setupUi(self) # ----------init variable------------ self.suspend = suspend self.cores = cores self.schedule_status = schedule_status self.waiting_min = waiting_min self.language = language self.language_list = ['English', 'Chinese'] # ----------init widget-------------- self.label_suspend = QTreeWidgetItem() self.checkbox_suspend = QCheckBox() self.label_cores = QTreeWidgetItem() self.edit_cores = QSpinBox() self.label_plan = QTreeWidgetItem() self.edit_plan_datetime = QDateTimeEdit() self.label_about = QTreeWidgetItem() self.label_language = QTreeWidgetItem() self.combobox_lauguage = QComboBox() # -----------init function---------------- self.ui_set() self.btn() self.init_data_show() self.self_translate(language) self.show() def btn(self): self.tree_setting.itemClicked.connect(self.effect_expand) self.tree_setting.itemChanged.connect(self.enable_schedule) self.combobox_lauguage.activated.connect(self.choose_language) self.checkbox_suspend.stateChanged.connect(self.change_suspend_status) def ui_set(self): # style self.setStyleSheet( "QSpinBox{border:1.5px solid #778899;border-radius:4px; padding:2px 2px}" "QDateTimeEdit{border:1.5px solid #778899;border-radius:4px; padding:2px 2px}" ) self.tree_setting.setColumnWidth(0, 180) self.tree_setting.expandItem(self.tree_setting.topLevelItem(0)) self.tree_setting.topLevelItem(1).setCheckState(1, 0) self.edit_cores.setMaximumSize(50, 25) self.edit_cores.setContentsMargins(0, 4, 0, 0) self.edit_cores.setMinimum(1) self.edit_cores.setMaximum(132) self.label_plan.setDisabled(True) self.edit_plan_datetime.setMaximumSize(135, 28) self.edit_plan_datetime.setDisabled(True) self.combobox_lauguage.setMaximumSize(135, 28) self.combobox_lauguage.addItems(self.language_list) self.combobox_lauguage.setCurrentText(self.language) # function self.add_tree_item(0, self.label_suspend, "暂停队列", self.checkbox_suspend) self.add_tree_item(0, self.label_cores, "使用核数", self.edit_cores) self.add_tree_item(1, self.label_plan, "计划启动于", self.edit_plan_datetime) self.add_tree_item(2, self.label_language, "语言选择", self.combobox_lauguage) def add_tree_item(self, top_level_index, label, label_name, input_edit): label.setText(0, label_name) self.tree_setting.topLevelItem(top_level_index).addChild(label) self.tree_setting.setItemWidget(label, 1, input_edit) def effect_expand(self, item, column): index = self.tree_setting.indexOfTopLevelItem(item) if index >= 0: if item.isExpanded(): item.setExpanded(False) else: item.setExpanded(True) def enable_schedule(self, item, column): index = self.tree_setting.indexOfTopLevelItem(item) if index == 1: check_state = item.checkState(column) self.schedule_status = bool(check_state) self.label_plan.setDisabled(2 - check_state) self.edit_plan_datetime.setEnabled(check_state) item.setExpanded(2 - check_state) self.reset_date_edit() self.suspend = self.checkbox_suspend.checkState() self.checkbox_suspend.setCheckState(self.suspend + check_state) self.checkbox_suspend.setDisabled(check_state) def init_data_show(self): self.edit_cores.setValue(self.cores) self.checkbox_suspend.setCheckState(self.suspend * 2) if self.schedule_status: self.tree_setting.topLevelItem(1).setCheckState(1, 2) self.label_plan.setDisabled(False) self.edit_plan_datetime.setEnabled(True) self.tree_setting.topLevelItem(1).setExpanded(True) waiting_seconds = self.waiting_min * 60 self.edit_plan_datetime.setDisplayFormat("yyyy/MM/dd HH:mm") self.edit_plan_datetime.setDateTime( QDateTime.currentDateTime().addSecs(waiting_seconds)) else: self.reset_date_edit() def reset_date_edit(self): self.edit_plan_datetime.setDisplayFormat("yyyy/MM/dd HH:mm") self.edit_plan_datetime.setDateTime(QDateTime.currentDateTime()) self.edit_plan_datetime.setMinimumDateTime(QDateTime.currentDateTime()) self.edit_plan_datetime.setMaximumDateTime( QDateTime.currentDateTime().addDays(5)) self.edit_plan_datetime.setCalendarPopup(True) def change_suspend_status(self, status): self.suspend = bool(status) def plan_start(self): curr_time = QDateTime.currentSecsSinceEpoch() schedule_time = self.edit_plan_datetime.dateTime().toSecsSinceEpoch() self.waiting_min = int(round((schedule_time - curr_time) / 60, 0)) print('waiting min', self.waiting_min) self.signal_waiting_min.emit(self.waiting_min) def choose_language(self): language = self.combobox_lauguage.currentText() self.signal_change_language.emit(language) self.self_translate(language) def self_translate(self, language): if language == 'English': self.label_suspend.setText(0, 'Suspend next') self.label_cores.setText(0, 'Threads number') self.label_plan.setText(0, 'Scheduled in') self.label_language.setText(0, 'Language') else: self.label_suspend.setText(0, "暂停队列") self.label_cores.setText(0, "使用核数") self.label_plan.setText(0, "计划启动于") self.label_language.setText(0, "语言选择") self.retranslateUi(self) def closeEvent(self, event): self.cores = self.edit_cores.value() suspend_status = self.checkbox_suspend.checkState() self.signal_core_number.emit(self.cores) self.signal_schedule_status.emit(self.schedule_status) if self.schedule_status: self.plan_start() else: self.signal_cancel_plan.emit(' ') self.signal_suspend_status.emit(bool(suspend_status)) self.close()
class QtDBConsoleWindow(QMainWindow): def __init__(self, master): super(QtDBConsoleWindow, self).__init__() self.master = master self.connection = self.master.connection self.GroupBoxSeg = [1, 10, 1] self.processing = [] #Fixme: QTimer to be added to update the page automatically self.mainWidget = QWidget() self.mainLayout = QGridLayout() self.mainWidget.setLayout(self.mainLayout) self.setCentralWidget(self.mainWidget) self.occupied() self.setLoginUI() self.createHeadLine() self.createMain() self.createApp() if isActive(self.connection): self.connectDB() def setLoginUI(self): self.setGeometry(200, 200, 600, 1200) self.setWindowTitle('Database Console') self.menubar = self.menuBar() self.menubar.setNativeMenuBar(False) ################################################### ## Database Menu ################################################### self.actionDatabase = self.menubar.addMenu("&Database") self.ViewerAction = QAction("&View Table") self.ViewerAction.triggered.connect(self.viewTable) self.actionDatabase.addAction(self.ViewerAction) ################################################### ## Image Menu ################################################### self.actionImage = self.menubar.addMenu("&Image") self.InsertImgAction = QAction("&Insert Image") self.InsertImgAction.triggered.connect(self.insertImage) self.actionImage.addAction(self.InsertImgAction) self.ViewImgAction = QAction("&View Image") self.ViewImgAction.triggered.connect(self.viewImage) self.actionImage.addAction(self.ViewImgAction) ################################################### ## Shipment Menu ################################################### self.actionShipment = self.menubar.addMenu("&Shipment") self.sendPackAction = QAction("&Send Package") self.sendPackAction.triggered.connect(self.sendPackage) self.actionShipment.addAction(self.sendPackAction) self.receivePackAction = QAction("&Receive Package") self.receivePackAction.triggered.connect(self.receivePackage) self.actionShipment.addAction(self.receivePackAction) ################################################### ## User Menu ################################################### self.actionUser = self.menubar.addMenu("&User") self.ShowUserAction = QAction("&Show Users", self) self.ShowUserAction.triggered.connect(self.displayUsers) self.actionUser.addAction(self.ShowUserAction) self.AddUserAction = QAction("&Add Users", self) self.AddUserAction.triggered.connect(self.addUsers) self.actionUser.addAction(self.AddUserAction) self.UpdateUserAction = QAction("&Update Profile", self) self.UpdateUserAction.triggered.connect(self.updateProfile) self.actionUser.addAction(self.UpdateUserAction) self.ShowInstAction = QAction("&Show institute", self) self.ShowInstAction.triggered.connect(self.displayInstitue) self.actionUser.addAction(self.ShowInstAction) ################################################### ## Miscellanea Menu ################################################### self.actionMiscel = self.menubar.addMenu("&Miscellanea") self.ComplaintAction = QAction("&Submit Complaint", self) self.ComplaintAction.triggered.connect(self.fileComplaint) self.actionMiscel.addAction(self.ComplaintAction) self.show() def activateMenuBar(self): self.menubar.setDisabled(False) def deactivateMenuBar(self): self.menubar.setDisabled(True) def enableMenuItem(self, item, enabled): item.setEnabled(enabled) ########################################################################## ## Functions for Table Viewer ########################################################################## def viewTable(self): viewTableTab = QtViewTableTab(self) self.MainTabs.addTab(viewTableTab, "Database Viewer") self.MainTabs.setCurrentWidget(viewTableTab) ########################################################################## ## Functions for Table Viewer (END) ########################################################################## ########################################################################## ## Functions for Image ########################################################################## def insertImage(self): insertImageTab = QtImageInsertionTab(self) self.InsertImgAction.setDisabled(True) self.MainTabs.addTab(insertImageTab, "Insert Image") self.MainTabs.setCurrentWidget(insertImageTab) def viewImage(self): viewImageTab = QtImageViewerTab(self) self.MainTabs.addTab(viewImageTab, "Image Viewer") self.MainTabs.setCurrentWidget(viewImageTab) ########################################################################## ## Functions for Image (END) ########################################################################## ########################################################################## ## Functions for Shipment ########################################################################## def sendPackage(self): self.sendPackageTab = QWidget() # Add tabs self.MainTabs.addTab(self.sendPackageTab, "Send Package") self.sendPackAction.setDisabled(True) self.sendPackageTab.layout = QGridLayout(self) sendPackageLabel = QLabel('<font size="12"> Package Delivery </font>') sendPackageLabel.setMaximumHeight(60) self.SPSenderLabel = QLabel('Sender:') self.SPSenderEdit = QLineEdit('') self.SPSenderEdit.setEchoMode(QLineEdit.Normal) self.SPSenderEdit.setPlaceholderText('Sender Name') self.SPReceiverLabel = QLabel('Receiver:') self.SPReceiverEdit = QLineEdit('') self.SPReceiverEdit.setEchoMode(QLineEdit.Normal) self.SPReceiverEdit.setPlaceholderText('Receiver Name') self.SPReceiverEdit.setDisabled(True) siteList = getByColumnName("institute", describeInstitute(self.connection), retrieveAllInstitute(self.connection)) self.SPOriginLabel = QLabel('Origin:') self.SPOriginCombo = QComboBox() self.SPOriginCombo.addItems(["{0}".format(x) for x in siteList]) self.SPDestinationLabel = QLabel('Destination:') self.SPDestinationCombo = QComboBox() self.SPDestinationCombo.addItems(["{0}".format(x) for x in siteList]) self.SPDateSentLabel = QLabel('date sent:') self.SPDateSentEdit = QDateTimeEdit() self.SPDateSentEdit.setDateTime(QDateTime.currentDateTime()) self.SPDateReceivedLabel = QLabel('date received:') self.SPDateReceivedEdit = QDateTimeEdit() self.SPDateReceivedEdit.setDisabled(True) #self.SPDateReceivedEdit.setDateTime(QDateTime.currentDateTime()) self.SPCarrierLabel = QLabel('Carrier:') self.SPCarrierEdit = QLineEdit('') self.SPCarrierEdit.setEchoMode(QLineEdit.Normal) self.SPCarrierEdit.setPlaceholderText('carrier name') self.SPTrackingLabel = QLabel('Tracking Number:') self.SPTrackingEdit = QLineEdit('') self.SPTrackingEdit.setEchoMode(QLineEdit.Normal) self.SPTrackingEdit.setPlaceholderText('Tracking Code') self.SPCommentLabel = QLabel('Comment:') self.SPCommentEdit = QTextEdit('') self.SPCommentEdit.setPlaceholderText("Your comment") self.SPFeedBackLabel = QLabel() self.SPSubmitButton = QPushButton('Submit') self.SPSubmitButton.clicked.connect(self.submitSPRequest) self.sendPackageTab.layout.addWidget(sendPackageLabel, 0, 0, 1, 4, Qt.AlignTop) self.sendPackageTab.layout.addWidget(self.SPSenderLabel, 1, 0, 1, 1) self.sendPackageTab.layout.addWidget(self.SPSenderEdit, 1, 1, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDateSentLabel, 1, 2, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDateSentEdit, 1, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPOriginLabel, 2, 0, 1, 1) self.sendPackageTab.layout.addWidget(self.SPOriginCombo, 2, 1, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDestinationLabel, 2, 2, 1, 1) self.sendPackageTab.layout.addWidget(self.SPDestinationCombo, 2, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCarrierLabel, 3, 0, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCarrierEdit, 3, 1, 1, 1) self.sendPackageTab.layout.addWidget(self.SPTrackingLabel, 3, 2, 1, 1) self.sendPackageTab.layout.addWidget(self.SPTrackingEdit, 3, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCommentLabel, 4, 0, 1, 4, Qt.AlignLeft) self.sendPackageTab.layout.addWidget(self.SPCommentEdit, 5, 0, 3, 4) self.sendPackageTab.layout.addWidget(self.SPFeedBackLabel, 8, 0, 1, 2) self.sendPackageTab.layout.addWidget(self.SPSubmitButton, 8, 3, 1, 1) self.sendPackageTab.setLayout(self.sendPackageTab.layout) self.MainTabs.setCurrentWidget(self.sendPackageTab) def submitSPRequest(self): if self.SPTrackingEdit.text() == "": self.SPFeedBackLabel.setText( "Please make sure Tracking Number are filled") return if self.SPSenderEdit.text() == "": self.SPFeedBackLabel.setText("Please make sure sender are filled") return Args = describeTable(self.connection, "shipment") Data = [] SubmitArgs = [] for arg in Args: if arg == "origin": Data.append(self.SPOriginCombo.currentText()) SubmitArgs.append(arg) if arg == "destination": Data.append(self.SPDestinationCombo.currentText()) SubmitArgs.append(arg) if arg == "sender": Data.append(self.SPSenderEdit.text()) SubmitArgs.append(arg) if arg == "date_sent": Data.append(self.SPDateSentEdit.dateTime().toUTC().toString( "yyyy-dd-MM hh:mm:ss.z")) SubmitArgs.append(arg) if arg == "carrier": Data.append(self.SPCarrierEdit.text()) SubmitArgs.append(arg) if arg == "tracking_number": Data.append(self.SPTrackingEdit.text()) SubmitArgs.append(arg) if arg == "comment": Data.append(self.SPCommentEdit.toPlainText()) SubmitArgs.append(arg) try: insertGenericTable(self.connection, "shipment", SubmitArgs, Data) except: print("Failed to submit the shipment record") return self.SPSenderLabel.deleteLater() self.SPSenderEdit.deleteLater() self.SPDateSentLabel.deleteLater() self.SPDateSentEdit.deleteLater() self.SPOriginLabel.deleteLater() self.SPOriginCombo.deleteLater() self.SPDestinationLabel.deleteLater() self.SPDestinationCombo.deleteLater() self.SPCarrierLabel.deleteLater() self.SPCarrierEdit.deleteLater() self.SPTrackingLabel.deleteLater() self.SPTrackingEdit.deleteLater() self.SPCommentLabel.deleteLater() self.SPCommentEdit.deleteLater() self.SPFeedBackLabel.deleteLater() self.SPSubmitButton.deleteLater() self.sendPackageTab.layout.removeWidget(self.SPSenderLabel) self.sendPackageTab.layout.removeWidget(self.SPSenderEdit) self.sendPackageTab.layout.removeWidget(self.SPDateSentLabel) self.sendPackageTab.layout.removeWidget(self.SPDateSentEdit) self.sendPackageTab.layout.removeWidget(self.SPOriginLabel) self.sendPackageTab.layout.removeWidget(self.SPOriginCombo) #self.sendPackageTab.layout.removeWidget(self.SPDestinationLabel) #self.sendPackageTab.layout.removeWidget(self.SPDestinationCombo) self.sendPackageTab.layout.removeWidget(self.SPCarrierLabel) self.sendPackageTab.layout.removeWidget(self.SPCarrierEdit) self.sendPackageTab.layout.removeWidget(self.SPTrackingLabel) self.sendPackageTab.layout.removeWidget(self.SPTrackingEdit) self.sendPackageTab.layout.removeWidget(self.SPCommentLabel) self.sendPackageTab.layout.removeWidget(self.SPCommentEdit) self.sendPackageTab.layout.removeWidget(self.SPFeedBackLabel) self.sendPackageTab.layout.removeWidget(self.SPSubmitButton) self.SPFeedBackLabel = QLabel("Submitted") self.SPFeedBackLabel.setStyleSheet("color:green") self.SPContinueButton = QPushButton('Continue') self.SPContinueButton.clicked.connect(self.recreateSP) self.SPCloseButton = QPushButton('Close') self.SPCloseButton.clicked.connect(self.closeSP) self.sendPackageTab.layout.addWidget(self.SPFeedBackLabel, 1, 0, 1, 2) self.sendPackageTab.layout.addWidget(self.SPContinueButton, 1, 3, 1, 1) self.sendPackageTab.layout.addWidget(self.SPCloseButton, 1, 4, 1, 1) return def recreateSP(self): self.closeTab(self.MainTabs.currentIndex()) self.sendPackage() def closeSP(self): self.closeTab(self.MainTabs.currentIndex()) def receivePackage(self): self.receivePackageTab = QWidget() # Add tabs self.MainTabs.addTab(self.receivePackageTab, "Receive Package") self.receivePackAction.setDisabled(True) self.receivePackageTab.layout = QGridLayout(self) receivePackageLabel = QLabel( '<font size="12"> Package Delivery </font>') receivePackageLabel.setMaximumHeight(60) self.RPIDLabel = QLabel('ID:') self.RPIDEdit = QLineEdit('') self.RPIDEdit.setEchoMode(QLineEdit.Normal) self.RPIDEdit.setPlaceholderText('Shipment ID') self.RPFetchButton = QPushButton("Fetch") self.RPFetchButton.clicked.connect(self.fillRPRequest) self.RPSenderLabel = QLabel('Sender:') self.RPSenderEdit = QLineEdit('') self.RPSenderEdit.setEchoMode(QLineEdit.Normal) self.RPSenderEdit.setPlaceholderText('Sender Name') self.RPSenderEdit.setDisabled(True) self.RPReceiverLabel = QLabel('Receiver:') self.RPReceiverEdit = QLineEdit('') self.RPReceiverEdit.setEchoMode(QLineEdit.Normal) self.RPReceiverEdit.setPlaceholderText('Receiver Name') siteList = getByColumnName("institute", describeInstitute(self.connection), retrieveAllInstitute(self.connection)) self.RPOriginLabel = QLabel('Origin:') self.RPOriginCombo = QComboBox() self.RPOriginCombo.addItems(["{0}".format(x) for x in siteList]) self.RPOriginCombo.setDisabled(True) self.RPDestinationLabel = QLabel('Destination:') self.RPDestinationCombo = QComboBox() self.RPDestinationCombo.addItems(["{0}".format(x) for x in siteList]) self.RPDestinationCombo.setDisabled(True) self.RPDateSentLabel = QLabel('date sent:') self.RPDateSentEdit = QDateTimeEdit() #self.RPDateSentEdit.setDateTime(QDateTime.currentDateTime()) self.RPDateSentEdit.setDisabled(True) self.RPDateReceivedLabel = QLabel('date received:') self.RPDateReceivedEdit = QDateTimeEdit() self.RPDateReceivedEdit.setDateTime(QDateTime.currentDateTime()) self.RPCarrierLabel = QLabel('Carrier:') self.RPCarrierEdit = QLineEdit('') self.RPCarrierEdit.setEchoMode(QLineEdit.Normal) self.RPCarrierEdit.setPlaceholderText('carrier name') self.RPCarrierEdit.setDisabled(True) self.RPTrackingLabel = QLabel('Tracking Number:') self.RPTrackingEdit = QLineEdit('') self.RPTrackingEdit.setEchoMode(QLineEdit.Normal) self.RPTrackingEdit.setPlaceholderText('Tracking Code') self.RPTrackingEdit.setDisabled(True) self.RPCommentLabel = QLabel('Comment:') self.RPCommentEdit = QTextEdit('') self.RPCommentEdit.setPlaceholderText("Your comment") self.RPFeedBackLabel = QLabel() self.RPSubmitButton = QPushButton('Submit') self.RPSubmitButton.clicked.connect(self.submitRPRequest) self.receivePackageTab.layout.addWidget(receivePackageLabel, 0, 0, 1, 4, Qt.AlignTop) self.receivePackageTab.layout.addWidget(self.RPIDLabel, 1, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPIDEdit, 1, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPFetchButton, 1, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPSenderLabel, 2, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPSenderEdit, 2, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateSentLabel, 2, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateSentEdit, 2, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPReceiverLabel, 3, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPReceiverEdit, 3, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateReceivedLabel, 3, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDateReceivedEdit, 3, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPOriginLabel, 4, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPOriginCombo, 4, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDestinationLabel, 4, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPDestinationCombo, 4, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCarrierLabel, 5, 0, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCarrierEdit, 5, 1, 1, 1) self.receivePackageTab.layout.addWidget(self.RPTrackingLabel, 5, 2, 1, 1) self.receivePackageTab.layout.addWidget(self.RPTrackingEdit, 5, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCommentLabel, 6, 0, 1, 4, Qt.AlignLeft) self.receivePackageTab.layout.addWidget(self.RPCommentEdit, 7, 0, 3, 4) self.receivePackageTab.layout.addWidget(self.RPFeedBackLabel, 10, 0, 1, 3) self.receivePackageTab.layout.addWidget(self.RPSubmitButton, 10, 3, 1, 1) self.receivePackageTab.setLayout(self.receivePackageTab.layout) self.MainTabs.setCurrentWidget(self.receivePackageTab) def fillRPRequest(self): try: header = describeTable(self.connection, "shipment", True) shipmentInfo = retrieveWithConstraint(self.connection, "shipment", id=self.RPIDEdit.text()) except: return if len(shipmentInfo) > 0 and len(header) == len(shipmentInfo[0]): self.RPFeedBackLabel.setText("Delivery Record found") self.RPSenderEdit.setText( getByColumnName("sender", header, shipmentInfo)[0]) origin_index = self.RPOriginCombo.findText( getByColumnName("origin", header, shipmentInfo)[0]) self.RPOriginCombo.setCurrentIndex(origin_index) destination_index = self.RPDestinationCombo.findText( getByColumnName("destination", header, shipmentInfo)[0]) self.RPDestinationCombo.setCurrentIndex(destination_index) time_string = getByColumnName( "date_sent", header, shipmentInfo)[0].strftime("%m/%d/%Y, %H:%M:%S") print(time_string) self.RPDateSentEdit.setDateTime(QDateTime.fromString(time_string)) self.RPCarrierEdit.setText( getByColumnName("carrier", header, shipmentInfo)[0]) self.RPTrackingEdit.setText( getByColumnName("tracking_number", header, shipmentInfo)[0]) self.RPCommentEdit.setText( getByColumnName("comment", header, shipmentInfo)[0]) else: self.RPFeedBackLabel.setText("Shipment ID not found") self.RPSenderEdit.setText("") origin_index = self.RPOriginCombo.findText("") self.RPOriginCombo.setCurrentIndex(origin_index) destination_index = self.RPDestinationCombo.findText("") self.RPDestinationCombo.setCurrentIndex(destination_index) #time_string = datetime.strftime("%m/%d/%Y, %H:%M:%S") #self.RPDateSentEdit.setDateTime(QDateTime.fromString(time_string)) self.RPCarrierEdit.setText("") self.RPTrackingEdit.setText("") self.RPCommentEdit.setText("") def submitRPRequest(self): if self.RPTrackingEdit.text() == "": self.RPFeedBackLabel.setText( "Please make sure Tracking Number are filled") return if self.RPReceiverEdit.text() == "": self.RPFeedBackLabel.setText( "Please make sure receiver are filled") return if self.RPDateReceivedEdit.text() == "": self.RPFeedBackLabel.setText( "Please make sure received time are filled") return Args = describeTable(self.connection, "shipment") Data = [] SubmitArgs = [] for arg in Args: if arg == "receiver": Data.append(self.RPReceiverEdit.text()) SubmitArgs.append(arg) if arg == "date_received": Data.append( self.RPDateReceivedEdit.dateTime().toUTC().toString( "yyyy-dd-MM hh:mm:ss.z")) SubmitArgs.append(arg) if arg == "comment": Data.append(self.RPCommentEdit.toPlainText()) SubmitArgs.append(arg) try: updateGenericTable(self.connection, "shipment", SubmitArgs, Data, id=int(self.RPIDEdit.text())) except: print("Failed to submit the shipment record") return self.RPIDLabel.deleteLater() self.RPIDEdit.deleteLater() self.RPFetchButton.deleteLater() self.RPSenderLabel.deleteLater() self.RPSenderEdit.deleteLater() self.RPDateSentLabel.deleteLater() self.RPDateSentEdit.deleteLater() self.RPReceiverLabel.deleteLater() self.RPReceiverEdit.deleteLater() self.RPDateReceivedLabel.deleteLater() self.RPDateReceivedEdit.deleteLater() self.RPOriginLabel.deleteLater() self.RPOriginCombo.deleteLater() self.RPDestinationLabel.deleteLater() self.RPDestinationCombo.deleteLater() self.RPCarrierLabel.deleteLater() self.RPCarrierEdit.deleteLater() self.RPTrackingLabel.deleteLater() self.RPTrackingEdit.deleteLater() self.RPCommentLabel.deleteLater() self.RPCommentEdit.deleteLater() self.RPFeedBackLabel.deleteLater() self.RPSubmitButton.deleteLater() self.receivePackageTab.layout.removeWidget(self.RPIDEdit) self.receivePackageTab.layout.removeWidget(self.RPIDLabel) self.receivePackageTab.layout.removeWidget(self.RPFetchButton) self.receivePackageTab.layout.removeWidget(self.RPSenderLabel) self.receivePackageTab.layout.removeWidget(self.RPSenderEdit) self.receivePackageTab.layout.removeWidget(self.RPDateSentLabel) self.receivePackageTab.layout.removeWidget(self.RPDateSentEdit) self.receivePackageTab.layout.removeWidget(self.RPReceiverLabel) self.receivePackageTab.layout.removeWidget(self.RPReceiverEdit) self.receivePackageTab.layout.removeWidget(self.RPDateReceivedLabel) self.receivePackageTab.layout.removeWidget(self.RPDateReceivedEdit) self.receivePackageTab.layout.removeWidget(self.RPOriginLabel) self.receivePackageTab.layout.removeWidget(self.RPOriginCombo) self.receivePackageTab.layout.removeWidget(self.RPDestinationLabel) self.receivePackageTab.layout.removeWidget(self.RPDestinationCombo) self.receivePackageTab.layout.removeWidget(self.RPCarrierLabel) self.receivePackageTab.layout.removeWidget(self.RPCarrierEdit) self.receivePackageTab.layout.removeWidget(self.RPTrackingLabel) self.receivePackageTab.layout.removeWidget(self.RPTrackingEdit) self.receivePackageTab.layout.removeWidget(self.RPCommentLabel) self.receivePackageTab.layout.removeWidget(self.RPCommentEdit) self.receivePackageTab.layout.removeWidget(self.RPFeedBackLabel) self.receivePackageTab.layout.removeWidget(self.RPSubmitButton) self.RPFeedBackLabel = QLabel("Submitted") self.RPFeedBackLabel.setStyleSheet("color:green") self.RPContinueButton = QPushButton('Continue') self.RPContinueButton.clicked.connect(self.recreateRP) self.RPCloseButton = QPushButton('Close') self.RPCloseButton.clicked.connect(self.closeRP) self.receivePackageTab.layout.addWidget(self.RPFeedBackLabel, 1, 0, 1, 2) self.receivePackageTab.layout.addWidget(self.RPContinueButton, 1, 3, 1, 1) self.receivePackageTab.layout.addWidget(self.RPCloseButton, 1, 4, 1, 1) return def recreateRP(self): self.closeTab(self.MainTabs.currentIndex()) self.receivePackage() def closeRP(self): self.closeTab(self.MainTabs.currentIndex()) ########################################################################## ## Functions for Shipment (END) ########################################################################## def displayUsers(self): self.processing.append("UserDisplay") UserDisplayTab = QWidget() # Add tabs self.MainTabs.addTab(UserDisplayTab, "User List") UserDisplayTab.layout = QGridLayout() dataList = ([describeTable(self.connection, "people")] + retrieveGenericTable(self.connection, "people")) proxy = QtDBTableWidget(dataList, 0) lineEdit = QLineEdit() lineEdit.textChanged.connect(proxy.on_lineEdit_textChanged) view = QTableView() view.setSortingEnabled(True) comboBox = QComboBox() comboBox.addItems(["{0}".format(x) for x in dataList[0]]) comboBox.currentIndexChanged.connect( proxy.on_comboBox_currentIndexChanged) label = QLabel() label.setText("Regex Filter") view.setModel(proxy) view.setSelectionBehavior(QAbstractItemView.SelectRows) view.setSelectionMode(QAbstractItemView.MultiSelection) view.setEditTriggers(QAbstractItemView.NoEditTriggers) UserDisplayTab.layout.addWidget(lineEdit, 0, 1, 1, 1) UserDisplayTab.layout.addWidget(view, 1, 0, 1, 3) UserDisplayTab.layout.addWidget(comboBox, 0, 2, 1, 1) UserDisplayTab.layout.addWidget(label, 0, 0, 1, 1) UserDisplayTab.setLayout(UserDisplayTab.layout) self.MainTabs.setCurrentWidget(UserDisplayTab) ########################################################################## ## Functions for Managing Users ########################################################################## def addUsers(self): ## Fixme: disable the menu when tab exists, relieaze the menu when closed. self.processing.append("AddUser") AddingUserTab = QWidget() # Add tabs self.MainTabs.addTab(AddingUserTab, "Adding User") self.AddUserAction.setDisabled(True) AddingUserTab.layout = QGridLayout(self) AddUserLabel = QLabel('<font size="12"> Creating new user: </font>') AddUserLabel.setMaximumHeight(60) self.AUNewUsernameLabel = QLabel('username') self.AUNewUsernameEdit = QLineEdit('') self.AUNewUsernameEdit.setEchoMode(QLineEdit.Normal) self.AUNewUsernameEdit.setPlaceholderText('new username') self.AUPasswordLabel = QLabel('password') self.AUPasswordEdit = QLineEdit('') self.AUPasswordEdit.setEchoMode(QLineEdit.Password) self.AUPasswordEdit.setPlaceholderText('new password') self.AURePasswordLabel = QLabel('re-password') self.AURePasswordEdit = QLineEdit('') self.AURePasswordEdit.setEchoMode(QLineEdit.Password) self.AURePasswordEdit.setPlaceholderText('verify password') self.AUNameLabel = QLabel('*name') self.AUNameEdit = QLineEdit('') self.AUNameEdit.setEchoMode(QLineEdit.Normal) self.AUNameEdit.setPlaceholderText('short name') self.AUFullNameLabel = QLabel('*full name') self.AUFullNameEdit = QLineEdit('') self.AUFullNameEdit.setEchoMode(QLineEdit.Normal) self.AUFullNameEdit.setPlaceholderText('full name') self.AUEmailLabel = QLabel('e-mail') self.AUEmailEdit = QLineEdit('') self.AUEmailEdit.setEchoMode(QLineEdit.Normal) self.AUEmailEdit.setPlaceholderText('*****@*****.**') self.AUInstLabel = QLabel('institute') self.AUInstComboBox = QComboBox() siteList = getByColumnName("description", describeInstitute(self.connection), retrieveAllInstitute(self.connection)) self.AUInstComboBox.addItems(["{0}".format(x) for x in siteList]) self.AUFeedBackLabel = QLabel() self.AUSubmitButton = QPushButton('Submit') self.AUSubmitButton.clicked.connect(self.submitAURequest) AddingUserTab.layout.addWidget(AddUserLabel, 0, 0, 1, 4) AddingUserTab.layout.addWidget(self.AUNewUsernameLabel, 1, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUNewUsernameEdit, 1, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUPasswordLabel, 2, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUPasswordEdit, 2, 1, 1, 1) AddingUserTab.layout.addWidget(self.AURePasswordLabel, 3, 0, 1, 1) AddingUserTab.layout.addWidget(self.AURePasswordEdit, 3, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUNameLabel, 4, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUNameEdit, 4, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUFullNameLabel, 4, 2, 1, 1) AddingUserTab.layout.addWidget(self.AUFullNameEdit, 4, 3, 1, 1) AddingUserTab.layout.addWidget(self.AUEmailLabel, 5, 0, 1, 1) AddingUserTab.layout.addWidget(self.AUEmailEdit, 5, 1, 1, 1) AddingUserTab.layout.addWidget(self.AUInstLabel, 5, 2, 1, 1) AddingUserTab.layout.addWidget(self.AUInstComboBox, 5, 3, 1, 1) AddingUserTab.layout.addWidget(self.AUFeedBackLabel, 6, 0, 1, 3) AddingUserTab.layout.addWidget(self.AUSubmitButton, 6, 3, 1, 1) AddingUserTab.setLayout(AddingUserTab.layout) self.MainTabs.setCurrentWidget(AddingUserTab) #self.enableMenuItem(self.AddingUserTab, False) def submitAURequest(self): # check the password consistency if self.AUNewUsernameEdit.text() == "" or self.AUNameEdit.text( ) == "" or self.AUFullNameEdit.text() == "": self.AUFeedBackLabel.setText("key blank is empty") return if self.AUPasswordEdit.text() != self.AURePasswordEdit.text(): self.AUFeedBackLabel.setText("passwords are inconsistent") self.AUPasswordEdit.setText("") self.AURePasswordEdit.setText("") return try: InstituteInfo = retrieveWithConstraint( self.connection, "institute", description=str(self.AUInstComboBox.currentText())) InstName = getByColumnName( "institute", describeTable(self.connection, "institute"), InstituteInfo) TimeZone = getByColumnName( "timezone", describeTable(self.connection, "institute"), InstituteInfo) except: self.AUFeedBackLabel.setText( "Failed to extract institute info, try to reconnect to DB") Args = describeTable(self.connection, "people") Data = [] Data.append(self.AUNewUsernameEdit.text()) Data.append(self.AUNameEdit.text()) Data.append(self.AUFullNameEdit.text()) Data.append(self.AUEmailEdit.text()) Data.append(InstName[0]) Data.append(self.AUPasswordEdit.text()) Data.append(TimeZone[0]) Data.append(0) try: createNewUser(self.connection, Args, Data) self.AUFeedBackLabel.setText("Query submitted") self.AUFeedBackLabel.setStyleSheet("color:green") return except: print("submitFailed") return def updateProfile(self): pass ########################################################################## ## Functions for Adding Users (END) ########################################################################## ########################################################################## ## Functions for Institutes display ########################################################################## def displayInstitue(self): self.processing.append("InstituteDisplay") displayInstiTab = QWidget() # Add tabs self.MainTabs.addTab(displayInstiTab, "Institutes") displayInstiTab.layout = QGridLayout(self) dataList = ([describeInstitute(self.connection)] + retrieveAllInstitute(self.connection)) proxy = QtDBTableWidget(dataList, 0) lineEdit = QLineEdit() lineEdit.textChanged.connect(proxy.on_lineEdit_textChanged) view = QTableView() view.setSortingEnabled(True) comboBox = QComboBox() comboBox.addItems(["{0}".format(x) for x in dataList[0]]) comboBox.currentIndexChanged.connect( proxy.on_comboBox_currentIndexChanged) label = QLabel() label.setText("Regex Filter") view.setModel(proxy) view.setSelectionBehavior(QAbstractItemView.SelectRows) view.setSelectionMode(QAbstractItemView.MultiSelection) view.setEditTriggers(QAbstractItemView.NoEditTriggers) displayInstiTab.layout.addWidget(lineEdit, 0, 1, 1, 1) displayInstiTab.layout.addWidget(view, 1, 0, 1, 3) displayInstiTab.layout.addWidget(comboBox, 0, 2, 1, 1) displayInstiTab.layout.addWidget(label, 0, 0, 1, 1) displayInstiTab.setLayout(displayInstiTab.layout) self.MainTabs.setCurrentWidget(displayInstiTab) ########################################################################## ## Functions for Institutes display (END) ########################################################################## ########################################################################## ## Functions for Complaint submission ########################################################################## def fileComplaint(self): self.ComplaintTab = QWidget() # Add tabs self.MainTabs.addTab(self.ComplaintTab, "Complaint") self.ComplaintAction.setDisabled(True) self.ComplaintTab.layout = QGridLayout(self) ComplaintLabel = QLabel( '<font size="12"> Submit the complaint </font>') ComplaintLabel.setMaximumHeight(60) self.FCNameLabel = QLabel('Name:') self.FCNameEdit = QLineEdit('') self.FCNameEdit.setEchoMode(QLineEdit.Normal) TableInfo = describeTable(self.connection, "people") UserInfo = retrieveWithConstraint(self.connection, "people", username=self.TryUsername) ShortName = getByColumnName("name", TableInfo, UserInfo) if len(ShortName) > 0: self.FCNameEdit.setText(str(ShortName[0])) self.FCDateTimeLabel = QLabel('Date(local)') self.FCDateTimeEdit = QDateTimeEdit() self.FCDateTimeEdit.setDateTime(QDateTime.currentDateTime()) self.FCCommentLabel = QLabel('Comment:') self.FCCommentEdit = QTextEdit('') self.FCCommentEdit.setPlaceholderText("Your comment") self.FCFeedBackLabel = QLabel() self.FCSubmitButton = QPushButton('Submit') self.FCSubmitButton.clicked.connect(self.submitFCRequest) self.ComplaintTab.layout.addWidget(ComplaintLabel, 0, 0, 1, 4, Qt.AlignTop) self.ComplaintTab.layout.addWidget(self.FCNameLabel, 1, 0, 1, 1) self.ComplaintTab.layout.addWidget(self.FCNameEdit, 1, 1, 1, 1) self.ComplaintTab.layout.addWidget(self.FCDateTimeLabel, 1, 2, 1, 1) self.ComplaintTab.layout.addWidget(self.FCDateTimeEdit, 1, 3, 1, 1) self.ComplaintTab.layout.addWidget(self.FCCommentLabel, 2, 0, 1, 4, Qt.AlignLeft) self.ComplaintTab.layout.addWidget(self.FCCommentEdit, 3, 0, 6, 4) self.ComplaintTab.layout.addWidget(self.FCFeedBackLabel, 9, 0, 1, 2) self.ComplaintTab.layout.addWidget(self.FCSubmitButton, 9, 3, 1, 1) self.ComplaintTab.setLayout(self.ComplaintTab.layout) self.MainTabs.setCurrentWidget(self.ComplaintTab) def submitFCRequest(self): if self.FCNameEdit.text() == "" or self.FCCommentEdit.toPlainText( ) == "": self.FCFeedBackLabel.setText( "Please make sure the name/comment are filled") return Args = describeTable(self.connection, "complaint") Data = [] Data.append(self.FCDateTimeEdit.dateTime().toUTC().toString( "yyyy-dd-MM hh:mm:ss.z")) Data.append(self.FCCommentEdit.toPlainText()) Data.append(self.FCNameEdit.text()) print(Data) try: insertGenericTable(self.connection, "complaint", Args, Data) except: print("Failed to submit the text") return self.FCNameLabel.deleteLater() self.FCNameEdit.deleteLater() self.FCDateTimeLabel.deleteLater() self.FCDateTimeEdit.deleteLater() self.FCCommentLabel.deleteLater() self.FCCommentEdit.deleteLater() self.FCFeedBackLabel.deleteLater() self.FCSubmitButton.deleteLater() self.ComplaintTab.layout.removeWidget(self.FCNameLabel) self.ComplaintTab.layout.removeWidget(self.FCNameEdit) self.ComplaintTab.layout.removeWidget(self.FCDateTimeLabel) self.ComplaintTab.layout.removeWidget(self.FCDateTimeEdit) self.ComplaintTab.layout.removeWidget(self.FCCommentLabel) self.ComplaintTab.layout.removeWidget(self.FCCommentEdit) self.ComplaintTab.layout.removeWidget(self.FCFeedBackLabel) self.ComplaintTab.layout.removeWidget(self.FCSubmitButton) self.FCFeedBackLabel = QLabel("Submitted") self.FCFeedBackLabel.setStyleSheet("color:green") self.FCContinueButton = QPushButton('Continue') self.FCContinueButton.clicked.connect(self.recreateFC) self.ComplaintTab.layout.addWidget(self.FCFeedBackLabel, 1, 0, 1, 2) self.ComplaintTab.layout.addWidget(self.FCContinueButton, 1, 3, 1, 1) return def recreateFC(self): self.closeTab(self.MainTabs.currentIndex()) self.fileComplaint() ########################################################################## ## Functions for Complaint submission (END) ########################################################################## def createHeadLine(self): self.deactivateMenuBar() self.HeadBox = QGroupBox() self.HeadLayout = QHBoxLayout() UsernameLabel = QLabel("Username:"******"Password:"******"Host IP:") self.HostEdit = QLineEdit('128.146.38.1') self.HostEdit.setEchoMode(QLineEdit.Normal) self.HostEdit.setMinimumWidth(150) self.HostEdit.setMaximumHeight(30) DatabaseLabel = QLabel("Database:") self.DatabaseEdit = QLineEdit('SampleDB') self.DatabaseEdit.setEchoMode(QLineEdit.Normal) self.DatabaseEdit.setMinimumWidth(150) self.DatabaseEdit.setMaximumHeight(30) self.ConnectButton = QPushButton("&Connect to DB") self.ConnectButton.clicked.connect(self.connectDB) self.HeadLayout.addWidget(UsernameLabel) self.HeadLayout.addWidget(self.UsernameEdit) self.HeadLayout.addWidget(PasswordLabel) self.HeadLayout.addWidget(self.PasswordEdit) self.HeadLayout.addWidget(HostLabel) self.HeadLayout.addWidget(self.HostEdit) self.HeadLayout.addWidget(DatabaseLabel) self.HeadLayout.addWidget(self.DatabaseEdit) self.HeadLayout.addWidget(self.ConnectButton) self.HeadBox.setLayout(self.HeadLayout) self.mainLayout.addWidget(self.HeadBox, 0, 0, self.GroupBoxSeg[0], 1) def destroyHeadLine(self): self.HeadBox.deleteLater() self.mainLayout.removeWidget(self.HeadBox) def clearLogInfo(self): self.connection = "Offline" def connectedHeadLine(self): self.activateMenuBar() self.HeadBox.deleteLater() self.mainLayout.removeWidget(self.HeadBox) self.HeadBox = QGroupBox() self.HeadLayout = QHBoxLayout() WelcomeLabel = QLabel("Hello,{}!".format(self.TryUsername)) statusString, colorString = checkDBConnection(self.connection) DBStatusLabel = QLabel() DBStatusLabel.setText("Database:{}/{}".format(self.TryHostAddress, self.TryDatabase)) DBStatusValue = QLabel() DBStatusValue.setText(statusString) DBStatusValue.setStyleSheet(colorString) self.SwitchButton = QPushButton("&Switch DB") self.SwitchButton.clicked.connect(self.destroyHeadLine) self.SwitchButton.clicked.connect(self.clearLogInfo) self.SwitchButton.clicked.connect(self.createHeadLine) self.HeadLayout.addWidget(WelcomeLabel) self.HeadLayout.addStretch(1) self.HeadLayout.addWidget(DBStatusLabel) self.HeadLayout.addWidget(DBStatusValue) self.HeadLayout.addWidget(self.SwitchButton) self.HeadBox.setLayout(self.HeadLayout) self.HeadBox.setLayout(self.HeadLayout) self.mainLayout.addWidget(self.HeadBox, 0, 0, self.GroupBoxSeg[0], 1) def createMain(self): self.MainBodyBox = QGroupBox() self.mainbodylayout = QHBoxLayout() self.MainTabs = QTabWidget() self.MainTabs.setTabsClosable(True) self.MainTabs.tabCloseRequested.connect( lambda index: self.closeTab(index)) self.mainbodylayout.addWidget(self.MainTabs) self.MainBodyBox.setLayout(self.mainbodylayout) self.mainLayout.addWidget(self.MainBodyBox, sum(self.GroupBoxSeg[0:1]), 0, self.GroupBoxSeg[1], 1) def destroyMain(self): self.MainBodyBox.deleteLater() self.mainLayout.removeWidget(self.MainBodyBox) def createApp(self): self.AppOption = QGroupBox() self.StartLayout = QHBoxLayout() self.ResetButton = QPushButton("&Refresh") self.FinishButton = QPushButton("&Finish") self.FinishButton.setDefault(True) self.FinishButton.clicked.connect(self.closeWindow) self.StartLayout.addWidget(self.ResetButton) self.StartLayout.addWidget(self.FinishButton) self.StartLayout.addStretch(1) self.AppOption.setLayout(self.StartLayout) self.mainLayout.addWidget(self.AppOption, sum(self.GroupBoxSeg[0:2]), 0, self.GroupBoxSeg[2], 1) def destroyApp(self): self.AppOption.deleteLater() self.mainLayout.removeWidget(self.AppOption) def sendBackSignal(self): self.backSignal = True def connectDB(self): try: if isActive(self.connection): self.TryUsername = self.master.TryUsername self.TryHostAddress = self.master.TryHostAddress self.TryDatabase = self.master.TryDatabase self.connectedHeadLine() return self.TryUsername = self.UsernameEdit.text() self.TryPassword = self.PasswordEdit.text() self.TryHostAddress = self.HostEdit.text() self.TryDatabase = self.DatabaseEdit.text() if self.TryUsername == '': msg.information(None, "Error", "Please enter a valid username", QMessageBox.Ok) return self.connection = QtStartConnection(self.TryUsername, self.TryPassword, self.TryHostAddress, self.TryDatabase) if isActive(self.connection): self.connectedHeadLine() except Exception as err: print("Error in connecting to database, {}".format(repr(err))) def syncDB(self): pass def changeDBList(self): self.DBNames = DBNames[str(self.HostName.currentText())] self.DatabaseCombo.clear() self.DatabaseCombo.addItems(self.DBNames) self.DatabaseCombo.setCurrentIndex(0) def closeTab(self, index): self.releaseAction(self.MainTabs.tabText(index)) self.MainTabs.removeTab(index) def releaseAction(self, text): if text == "Adding User": self.AddUserAction.setDisabled(False) return if text == "Complaint": self.ComplaintAction.setDisabled(False) return if text == "Send Package": self.sendPackAction.setDisabled(False) return if text == "Receive Package": self.receivePackAction.setDisabled(False) return if text == "Insert Image": self.InsertImgAction.setDisabled(False) return def closeWindow(self): self.close() self.release() def occupied(self): self.master.DBConsoleButton.setDisabled(True) def release(self): self.master.DBConsoleButton.setDisabled(False) def closeEvent(self, event): #Fixme: strict criterias for process checking should be added here: #if self.ProcessingTest == True: # QMessageBox.critical(self, 'Critical Message', 'There is running process, can not close!') # event.ignore() reply = QMessageBox.question( self, 'Window Close', 'Are you sure you want to exit, all unsubmitted content will be lost?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: print('DB console terminated') event.accept() else: event.ignore()
class WidgetAppendNewTask(QWidget): def __init__(self): super().__init__() self.setFixedSize(800, 600) self.move(500, 300) self.setWindowTitle('Добавление новой задачи') self.font1 = QFont() self.font1.setPointSize(16) self.lbl1 = QLabel(self) self.lbl1.move(50, 50) self.lbl1.resize(350, 50) self.lbl1.setFont(self.font1) self.lbl1.setText('Название задачи') self.line_name = QLineEdit(self) self.line_name.move(400, 50) self.line_name.resize(350, 50) self.line_name.setFont(self.font1) self.lbl2 = QLabel(self) self.lbl2.move(50, 125) self.lbl2.resize(350, 50) self.lbl2.setFont(self.font1) self.lbl2.setText('Подробнее') self.text_of_task = QPlainTextEdit(self) self.text_of_task.move(400, 125) self.text_of_task.resize(350, 150) self.text_of_task.setFont(self.font1) self.lbl3 = QLabel(self) self.lbl3.move(50, 300) self.lbl3.resize(350, 50) self.lbl3.setText('Укажите дату и время\n' 'начала выполнения задачи') self.lbl3.setFont(self.font1) self.start_check = QCheckBox(self) self.start_check.move(400, 300) self.start_check.resize(20, 50) self.start_check.setFont(self.font1) self.start_check.clicked.connect(self.start_check_triggered) self.dt_start = QDateTimeEdit(self) self.dt_start.move(430, 300) self.dt_start.resize(320, 50) self.dt_start.setFont(self.font1) self.dt_start.setDateTime(datetime.datetime.now()) self.dt_start.setDisabled(True) self.lbl4 = QLabel(self) self.lbl4.move(50, 400) self.lbl4.resize(350, 50) self.lbl4.setText('Установите приоритет задачи') self.lbl4.setFont(self.font1) self.prioritet = QComboBox(self) self.prioritet.move(400, 400) self.prioritet.resize(350, 50) self.prioritet.setFont(self.font1) self.prioritet.addItem('Приоритет в порядке очереди') self.prioritet.addItem('Средний приоритет') self.prioritet.addItem('Высокий приоритет') self.prioritet.addItem('Наивысший приоритет') self.btn_back = QPushButton(self) self.btn_back.move(0, 0) self.btn_back.resize(50, 25) self.btn_back.setFont(self.font1) self.btn_back.setText('<-') self.btn_back.clicked.connect(self.back_pushed) self.btn_ready = QPushButton(self) self.btn_ready.move(250, 500) self.btn_ready.resize(300, 50) self.btn_ready.setFont(self.font1) self.btn_ready.setText('Сохранить задачу') self.btn_ready.clicked.connect(self.ready_pushed) self.info_lbl = QLabel(self) self.info_lbl.move(150, 0) self.info_lbl.setFont(self.font1) self.info_lbl.setText('') self.info_lbl.setStyleSheet('color: red') def back_pushed(self): if self.line_name.text() == '': self.close() else: self.info_lbl.setText( 'Очистите поле "Название задачи" или сохраните задачу') self.info_lbl.resize(555, 25) def mousePressEvent(self, event): if event.button() == 8 and self.line_name.text() == '': self.close() else: self.info_lbl.setText( 'Очистите поле "Название задачи" или сохраните задачу') self.info_lbl.resize(555, 25) def start_check_triggered(self): if self.start_check.isChecked(): self.dt_start.setDisabled(False) else: self.dt_start.setDisabled(True) def ready_pushed(self): file = open('tasks.csv', encoding='UTF-8', mode='a', newline='') writer = csv.writer(file, delimiter=';', quoting=csv.QUOTE_MINIMAL) name = self.line_name.text() more = self.text_of_task.toPlainText() prioritet = self.prioritet.currentText() if self.start_check.isChecked(): start = self.dt_start.dateTime() else: start = 'None' dt = str(start.toPyDateTime()) dt = dt[:dt.index('.')] dt = dt[:-3] if prioritet == 'Приоритет в порядке очереди': prioritet = 1 elif prioritet == 'Средний приоритет': prioritet = 2 elif prioritet == 'Высокий приоритет': prioritet = 3 else: prioritet = 4 row = [ str(randint(10000, 99999)), name, more, dt, str(prioritet), 'NotResolved' ] writer.writerow(row) self.info_lbl.setText('Задача успешно сохранена') self.info_lbl.resize(555, 25) self.close()