def au(self, acc, paw): u = UserManage() u.addUser(acc, paw) er = QErrorMessage(self) er.setWindowTitle("提示") er.showMessage("添加成功!") er.show() self.showAll()
def pay(self, data): c = ZhuanzhangNote() c.addNote(data) d = CreditAbout() d.setPayed(self.cid) self.showAll() mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("支付成功!") mes.show()
def finish(self): name = self.lineEdit.text() num = self.spinBox.value() price = re.findall("[\d.]+", self.lineEdit_3.text())[0] if name and num and price: self.finish_signal.emit([name, int(num), float(price)]) self.close() else: mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("请输入完整内容!") mes.show()
def delClient(self): try: index = self.tableView.currentIndex().row() self.data.pop(index) self.showTable() mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("删除成功!") mes.show() except Exception as ret: print(ret) mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("删除失败!") mes.show()
def onPay(self): print("支付") try: index = self.tableView.currentIndex().row() self.cid = self.data[index][0] zid = self.cid.replace('H', 'Z') self.paydialog = PayDialog(self.data[index][2], zid) self.paydialog.show() self.paydialog.finish_signal.connect(self.pay) except Exception as ret: print(ret) mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("支付失败") mes.show()
def delContract(self, c): """删除合同""" try: index = self.tableView.currentIndex().row() cid = self.data[index][0] c = CreditAbout() res = c.delcontract(cid) if res: self.data.pop(index) self.showTable() except Exception as ret: print(ret) mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("删除失败") mes.show()
def _saveCfgFile(self,file): try: self.fileDialog.close() except: pass try: self.config.config["version"] = self.config.config["version"] + 1 self.config.save(file) self.mainWindow.statusbar.showMessage("Saved Configufration File: {0}.".format(file),5000) except: err = QErrorMessage(self.window) err.showMessage("Unable to save config file.") err.setModal(True) err.show()
def findContract(self): print("查找") ty = self.dic[self.comboBox.currentIndex()] d = self.lineEdit.text() if d: c = CreditAbout() self.data = c.getList(ty, d) self.showTable() mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("共找到{}条数据".format(len(self.data))) mes.show() return mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("查找失败!请输入正确格式!") mes.show()
def print(self): path = QFileDialog.getSaveFileName(parent=self, caption="选择导出位置", filter='*.pdf')[0] if path: try: self.web.page().printToPdf(path) mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("导出成功!") mes.show() return except Exception as ret: print(ret) mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("导出失败!") mes.show()
def onPay(self): print("开票") try: index = self.tableView.currentIndex().row() self.cid = self.data[index][0] zid = self.cid.replace('H', 'P') self.kaipiaodialog = KaipaioDialog([ zid, self.data[index][6], self.data[index][7], self.data[index][8] ]) self.kaipiaodialog.show() self.kaipiaodialog.finish_signal.connect(self.pay) except Exception as ret: print(ret) mes = QErrorMessage(self) mes.setWindowTitle("提示") mes.showMessage("支付失败") mes.show()
def _openCfgFile(self,file): self.config.locked = True try: self.fileDialog.close() except: pass try: self.config.load(file) self.mainWindow.statusbar.showMessage("Loaded Configufration File: {0}.".format(file),5000) self.syncConfigToUI() self.toggleNetParams() except: err = QErrorMessage(self.window) err.showMessage("Unable to parse config file.") err.setModal(True) err.show() self.config.locked = False self.autoExec()
def on_launch_click(self): launch_subject_list = [] selection = self.tableWidget.selectionModel() for selected in selection.selectedRows(): launch_subject_list.append(self.subject_list[selected.row()]) if len(launch_subject_list) < 1: error_dialog = QErrorMessage(self) error_dialog.showMessage("No selected rows!\nTo launch processing, please select the rows for the sessions/scans you want to launch.") error_dialog.show() else: if self._login.exec_() == QDialog.Accepted: SubmitStructuralPreprocessingHandEditBatch.do_submissions( self._login.username, self._login.password, launch_subject_list) self.on_refresh_click()
class PlansWindow(QWidget): """Класс, который показывает планы пользоваетеля""" def __init__(self): super().__init__() uic.loadUi('toggl_plans.ui', self) cursor.execute(f"SELECT plan FROM plans WHERE user_id = '{user_id}'") plans0 = cursor.fetchall() plans = [] for plan in plans0: plans.append(plan[0]) self.plans_scroll_area = QScrollArea(self) self.plans_scroll_area.resize(461, 351) self.plans_scroll_area.move(10, 120) self.scrollAreaWidgetContents2 = QWidget() self.scrollAreaWidgetContents2.setMinimumSize(455, 345) self.plans_grid = QGridLayout(self.scrollAreaWidgetContents2) self.plans_dict = {} self.add_button.clicked.connect(self.add_plan) self.list_of_plans = plans self.display_plans() def display_plans(self): """Функция, которая выводит список планов в ScrollArea""" self.plans_scroll_area = QScrollArea(self) self.plans_scroll_area.resize(461, 351) self.plans_scroll_area.move(10, 120) self.plans_scroll_area.setStyleSheet("background-color: white") self.scrollAreaWidgetContents2 = QWidget() self.scrollAreaWidgetContents2.setMinimumSize(455, 345) self.plans_grid = QGridLayout(self.scrollAreaWidgetContents2) self.reserved_plans = self.list_of_plans[::-1] n = 0 for plan in self.reserved_plans: if plan == '': continue else: plan_label = QLabel(plan) plan_label.setFont(QtGui.QFont('Bahnschrift Light SemiCondensed', 15)) check_box = QCheckBox() check_box.resize(20, 20) self.plans_grid.addWidget(check_box, n, 0) self.plans_grid.addWidget(plan_label, n, 1) n += 1 self.plans_dict[check_box] = plan_label check_box.stateChanged.connect(self.delete_plan) self.plans_scroll_area.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.plans_scroll_area.setWidget(self.scrollAreaWidgetContents2) self.plans_scroll_area.show() def add_plan(self): """Функция, которая добавляет новые планы""" if self.current_plan.text() == '': self.error_dialog = QErrorMessage() self.error_dialog.showMessage('Вам нужно обязательно ввести что-нибудь в поле.') self.error_dialog.show() return else: plan_text = self.current_plan.text() cursor.execute(f"INSERT INTO plans VALUES (?, ?)", (user_id, plan_text)) data_base.commit() self.list_of_plans.append(self.current_plan.text()) self.display_plans() self.current_plan.setText('') def delete_plan(self): """Функция, которая удаляет планы из списка""" sender = self.sender() plan_to_delete = self.plans_dict[sender] self.list_of_plans.remove(plan_to_delete.text()) cursor.execute(f"DELETE FROM plans WHERE plan = '{plan_to_delete.text()}'") data_base.commit() self.display_plans()
def on_error(self, msg): error = QErrorMessage(self) error.showMessage(msg) error.show() self.btn_login.setEnabled(True)
class MyWidget(QMainWindow): """Класс основного окна программы""" def __init__(self): super().__init__() uic.loadUi('toggl_app.ui', self) self.setWindowTitle("Toggl") self.setFixedSize(1062, 676) self.history_list = [] self.color = '' self.select_color.move(640, 60) self.insights_button.clicked.connect(self.view_insights) self.plans_button.clicked.connect(self.view_plans) self.no_color.toggle() self.no_color.clicked.connect(self.no_color_clicked) self.select_color.clicked.connect(self.color_selection) self.time = 0 self.timeInterval = 1000 self.timerUp = QTimer() self.timerUp.setInterval(self.timeInterval) self.timerUp.timeout.connect(self.updateUptime) self.start.clicked.connect(self.timerUp.start) self.start.clicked.connect(self.current_time) self.pause.clicked.connect(self.timerUp.stop) self.stop.clicked.connect(self.check_timers) self.data_table.setColumnCount(6) self.data_table.setHorizontalHeaderLabels(["Начало", "Задача", "Тэг", "Цвет", "Длительность", "Продолжить"]) def continue_task(self, timer): """Функция, которая создаёт таймеры""" sender = self.sender() timer0 = timer global flag if sender.isChecked(): flag = True timer0.start_timer() else: flag = False timer0.stop_timer() def add_content(self, data): """Функция, которая добавляет данные в таблицу""" self.data_table.setVisible(True) self.data_table.setRowCount(len(data)) row_id = 0 for row in data: for i in range(6): if i == 3: color = row[4] if color == '#ffffff': color_label = QLabel('○') else: color_label = QLabel(f'<h1 style="color: {color};">●') self.data_table.setCellWidget(row_id, 3, color_label) elif i == 5: btn = QCheckBox() cursor.execute(f"UPDATE data SET checkbox = '{btn}' WHERE start_time = '{row[1]}'") data_base.commit() cb_timer = Timers(btn, row_id, i - 1, self.data_table) btn.stateChanged.connect(partial(self.continue_task, timer=cb_timer)) self.data_table.setCellWidget(row_id, 5, btn) else: self.data_table.setItem(row_id, i, QTableWidgetItem(str(row[i + 1]))) row_id += 1 self.data_table.resizeColumnsToContents() self.data_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.data_table.update() def start_func(self): """Функция, которая выводит данные пользователя, если они уже есть""" cursor.execute(f"SELECT * FROM data WHERE user_id = '{user_id}'") data = cursor.fetchall() if len(data) == 0: self.data_table.setVisible(False) self.start_text.setStyleSheet("color: rgb(0, 0, 0)") else: self.add_content(data[::-1]) def view_insights(self): """Функция, которая запускает окно со статистикой""" self.insights_window = InsightsWindow() self.insights_window.setWindowTitle('Статистика') self.insights_window.setFixedSize(570, 385) self.insights_window.show() def view_plans(self): """Функия, которая запускает окно с планами""" self.plans_window = PlansWindow() self.plans_window.setWindowTitle('Ваши планы') self.plans_window.setFixedSize(480, 490) self.plans_window.show() def current_time(self): """Функция, которая регистрирует время начала выполнения задачи""" if '' == self.task.text(): self.error_dialog = QErrorMessage() self.error_dialog.showMessage('Вам нужно обязательно ввести название задачи.') self.error_dialog.show() self.timerUp.stop() self.reset() return else: self.start_time = datetime.datetime.now() self.start_time = self.start_time.strftime("%d-%m-%Y %H:%M:%S") def check_timers(self): if flag == True: self.error_dialog = QErrorMessage() self.error_dialog.showMessage('Сначала остановите другие таймеры.') self.error_dialog.show() return else: self.timerUp.stop() self.newtask() self.reset() def updateUptime(self): """Функция, которая обновляет таймер""" self.time += 1 self.settimer(self.time) def settimer(self, int): """Функция, которая передаёт значения таймера в Label""" self.time = int self.timelabel.setText(time.strftime('%H:%M:%S', time.gmtime(self.time))) def reset(self): """Функция, которая сбивает таймер""" self.time = 0 self.settimer(self.time) def newtask(self): """Функция, которая добавляет новую задачу""" if '00:00:00' == self.timelabel.text() or '' == self.task.text(): return else: if self.no_color.isChecked(): self.color = '#ffffff' data_list = [user_id, self.start_time, self.task.text(), '#' + self.tag.text(), self.color, time.strftime("%H:%M:%S", time.gmtime(self.time)), ''] self.selected_color.setStyleSheet("color: rgb(127, 127, 127)") cursor.execute("INSERT INTO data VALUES (?, ?, ?, ?, ?, ?, ?)", (data_list)) data_base.commit() cursor.execute(f"SELECT * FROM data WHERE user_id = '{user_id}'") data = cursor.fetchall() self.add_content(data[::-1]) self.history_list.append(data_list[1:-1]) self.task.setText('') self.tag.setText('') if not self.no_color.isChecked(): self.no_color.toggle() def no_color_clicked(self): """Функция, которая прячет Label с выбранным цветом, если выбран параметр 'без цвета'""" self.selected_color.setStyleSheet("color: rgb(127, 127, 127)") def color_selection(self): """Функция, которая запускает окно выбора цвета""" color = QColorDialog.getColor() try: self.color = color.name() self.selected_color.setStyleSheet(f"color: {color.name()}") if self.no_color.isChecked(): self.no_color.toggle() except TypeError: self.error_dialog = QErrorMessage() self.error_dialog.showMessage('Произошла ошибка. Видимо, такого цвета не существует') self.error_dialog.show()
class TopLevel(QWidget): """ Main window containing all GUI components. """ # # Used to cleanup background worker thread(s) (on exit) # class Exit(QObject): exitClicked = pyqtSignal() def closeEvent(self, event): self.close_event.exitClicked.emit() def __init__(self): super().__init__() self.close_event = self.Exit() # Thread cleanup on exit self.close_event.exitClicked.connect(self.stop_background_workers) # Configurable self.worker_check_period = 1 # seconds self.init_ui() def init_online_pred_tab(self): """ Initializes UI elements in the "Online Predictions" tab :return: (QWidget) online_training_tab """ online_pred_tab = QWidget() return online_pred_tab def init_ui(self): """ Initializes the top-level tab widget and all sub tabs ("Data", "Training", "Testing") """ self.setGeometry(0, 0, 1100, 800) self.setWindowTitle('Myo Tools') self.setObjectName("TopWidget") self.setStyleSheet("#TopWidget {background-color: white;}") # # Top-level layout # tools_layout = QVBoxLayout() self.tool_tabs = QTabWidget() # Fancy styling tab_widgets = self.tool_tabs.findChild(QStackedWidget) tab_widgets.setObjectName("TabWidgets") tools_layout.addWidget(self.tool_tabs) top_tabs = self.tool_tabs.findChild(QTabBar) top_tabs.setObjectName("TopTabs") self.tool_tabs.setStyleSheet( "QTabBar#TopTabs::tab {font-weight: bold; height:35px; width: 150px; border-radius: 3px; " " border: 2px solid #bbbbbb; background-color:#dddddd;}" "QStackedWidget#TabWidgets {background-color: #eeeeee;}") self.tool_tabs.currentChanged.connect(self.on_tab_changed) self.cur_index = 0 self.data_tools_tab = DataTools(self.on_device_connected, self.on_device_disconnected, self.is_data_tools_open) self.online_training_tab = OnlineTraining( self.data_tools_tab.data_collected) self.online_pred_tab = OnlineTesting( self.data_tools_tab.data_collected) self.tool_tabs.addTab(self.data_tools_tab, "Data Collection") self.tool_tabs.addTab(self.online_training_tab, "Online Training") self.tool_tabs.addTab(self.online_pred_tab, "Online Predictions") self.setLayout(tools_layout) self.show() def is_data_tools_open(self): return self.cur_index == 0 def on_device_connected(self, address, rssi, battery_level): """ Called on user initiated connection :param address: MAC address of connected Myo device """ self.online_pred_tab.device_connected(address, rssi, battery_level) self.online_training_tab.device_connected(address, rssi, battery_level) def on_device_disconnected(self, address): """ Called on user initiated disconnect, or unexpected disconnect :param address: MAC address of disconnected Myo device """ self.online_pred_tab.device_disconnected(address) self.online_training_tab.device_disconnected(address) def on_tab_changed(self, value): """ Intercepts a user attempting to switch tabs (to ensure a valid tab switch is taking place) value: Desired tab index to switch to """ if self.cur_index == value: return valid_switch = False # # Determine if we can switch # data_tool_idx = 0 online_train_idx = 1 online_pred_idx = 2 if self.cur_index == data_tool_idx: # # Check for incomplete Myo search workers # waiting_on_search = False for worker in self.data_tools_tab.search_threads: if not worker.complete: waiting_on_search = True break if not waiting_on_search: # # Check for background data workers # # worker_running = False # num_widgets = self.data_tools_tab.ports_found.count() # # for idx in range(num_widgets): # # Ignore port widgets (only interested in Myo device rows) # list_widget = self.data_tools_tab.ports_found.item(idx) # if hasattr(list_widget, "port_idx"): # continue # # myo_widget = self.data_tools_tab.ports_found.itemWidget(list_widget) # if not (myo_widget.worker is None): # if not myo_widget.worker.complete: # worker_running = True # break worker_running = False if not worker_running: # # Close the background video worker if appropriate # # if not self.data_tools_tab.gt_helper_open: # if not (self.data_tools_tab.gt_helper.worker is None): # self.data_tools_tab.gt_helper.stop_videos() # # while not (self.data_tools_tab.gt_helper.worker.complete): # time.sleep(self.worker_check_period) # # # # # IF we make it here, the switch is valid (for the case of the data tools tab) # # # valid_switch = True # else: # self.warn_user("Please close GT Helper first.") valid_switch = True else: self.warn_user( "Please close connection to Myo devices first.") else: self.warn_user( "Please wait for Myo device search to complete first.") # # To control switching out of online training / testing # elif self.cur_index == online_train_idx: valid_switch = True elif self.cur_index == online_pred_idx: valid_switch = True if valid_switch: self.cur_index = value else: self.tool_tabs.setCurrentIndex(self.cur_index) def stop_background_workers(self): """ This function is called on (user click-initiated) exit of the main window. """ self.data_tools_tab.stop_data_tools_workers() def warn_user(self, message): """ Generates a pop-up warning message :param message: The text to display """ self.warning = QErrorMessage() self.warning.showMessage(message) self.warning.show()
def popup(self, e): """As seen at: https://stackoverflow.com/questions/40227047/ python-pyqt5-how-to-show-an-error-message-with-pyqt5""" error_dialog = QErrorMessage(self) error_dialog.showMessage(e.text) error_dialog.show()