class ShowListWindow(QMainWindow): def __init__(self, app_context: ApplicationContext, flashcard_manager: FlashcardManager, card_list: CardList, parent=None): super(ShowListWindow, self).__init__(parent) self.app_context = app_context self.flashcard_manager = flashcard_manager self.card_list = card_list self.setFixedSize(600, 400) self.setWindowTitle(self.card_list.name + " - TangoCards") main_widget = QWidget() main_widget.setProperty("cssClass", "background") main_layout = QVBoxLayout() learn_button = QPushButton("Frag mich ab!") learn_button.clicked.connect(self.on_click_learn) main_layout.addWidget(learn_button) self.card_list_model = QStringListModel( self.card_list.get_card_name_list()) self.cards_list_component = QListView() self.cards_list_component.setModel(self.card_list_model) self.cards_list_component.setEditTriggers( QAbstractItemView.NoEditTriggers) main_layout.addWidget(self.cards_list_component) tool_buttons_widget = QWidget() tool_buttons_layout = QHBoxLayout() tool_buttons_widget.setLayout(tool_buttons_layout) add_button = QPushButton("Hinzufügen") add_button.clicked.connect(self.on_click_add) delete_button = QPushButton("Löschen") delete_button.clicked.connect(self.on_click_delete) tool_buttons_layout.addWidget(add_button) tool_buttons_layout.addWidget(delete_button) main_layout.addWidget(tool_buttons_widget) main_widget.setLayout(main_layout) self.setCentralWidget(main_widget) def update_list(self): self.card_list_model = QStringListModel( self.card_list.get_card_name_list()) self.cards_list_component.setModel(self.card_list_model) self.cards_list_component.repaint() def on_click_add(self): word_text, ok1 = QInputDialog.getText(self, 'Karte hinzufügen', 'Wort:') if not ok1: return if word_text is None or len(word_text) < 2: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Der Text ist leer oder zu kurz!") msg.exec_() return if self.card_list.get_card(word_text) is not None: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Wort ist bereits in der Lernkartei!") msg.exec_() return solution_text, ok2 = QInputDialog.getText(self, 'Karte hinzufügen', 'Lösung:') if not ok2: return if solution_text is None or len(word_text) < 2: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Der Text ist leer oder zu kurz!") msg.exec_() return self.card_list.add_card(word_text, solution_text) self.flashcard_manager.save_list(self.card_list) self.update_list() def on_click_learn(self): if len(self.card_list.cards) < 1: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Du musst erst Lernkarten hinzufügen!") msg.exec_() return window = LearnWindow(self.app_context, self.flashcard_manager, self.card_list, parent=self.parent()) self.hide() window.show() def on_click_delete(self): if len(self.cards_list_component.selectedIndexes()) < 1: return word_text = self.cards_list_component.selectedIndexes()[0].data() card = self.card_list.get_card(word_text) if card is not None: self.card_list.remove_card(card) self.flashcard_manager.save_list(self.card_list) self.update_list()
class MainWindow(QWidget): # singal_chart_list_update = pyqtSignal(list) # signal_client_status_change = pyqtSignal(str) # signal_incoming_msg = pyqtSignal(str) def __init__(self, client): super().__init__() self.__client = client self.__initUI() # def initUI_list(self): def __initUI(self): self.__main_win = QHBoxLayout() self.__chart_status_win = QVBoxLayout() self.__chart_clients = QListWidget() self.__chart_status_win.addWidget(self.__chart_clients) # self.chart_status = QListView() # self.chart_status.setMinimumSize(100, 100) # self.chart_status.setWindowTitle('Состояние чата') # self.model_chart_status = QStandardItemModel(self.chart_status) # self.chart_status_win.addWidget(self.chart_status) self.__client_update_status = QListView() self.__client_update_status.setMinimumSize(100, 100) self.__client_update_status.setWindowTitle( 'Обновление статуса клиента') self.__model_client_status = QStandardItemModel( self.__client_update_status) self.__chart_status_win.addWidget(self.__client_update_status) self.__msg_window = QListView() self.__msg_window.setMinimumSize(700, 400) self.__msg_window.setWindowTitle('Общий чат') self.__model_chart_list = QStandardItemModel(self.__msg_window) self.__msg_input = QLineEdit() self.__input_Btn = QPushButton() self.__input_Btn.clicked.connect(self.__on_clicked) self.__privat_msg_input = QLineEdit() self.__main_chart_win = QVBoxLayout() self.__main_chart_win.addWidget(self.__msg_window) self.__msg_input_with_Btn = QHBoxLayout() self.__msg_input_with_Btn.addWidget(self.__msg_input) self.__msg_input_with_Btn.addWidget(self.__input_Btn) self.__main_chart_win.addLayout(self.__msg_input_with_Btn) self.__main_win.addLayout(self.__chart_status_win) self.__main_win.addLayout(self.__main_chart_win) self.__main_win.addWidget(self.__privat_msg_input) self.setLayout(self.__main_win) self.setGeometry(300, 300, 300, 100) self.show() self.__client.signals.singal_chart_list_update.connect( self.__update_chart_status) self.__client.signals.signal_client_status_change.connect( self.__print_new_client_status) self.__client.signals.signal_incoming_msg.connect(self.__print_msg) def __update_chart_status(self, clients_list): # clients_list = clients_list.split(';') # print(clients_list) self.__chart_clients.clear() for i in clients_list: self.__chart_clients.addItem(i) self.__chart_clients.repaint() # def update_chart_status(self, clients_list): # clients_list = QStandardIddtem(clients_list) # self.model_chart_status.appendRow(clients_list) # self.client_update_status.setModel(self.model_chart_status) def __print_new_client_status(self, client_update_status): client_update_status = QStandardItem(client_update_status) self.__model_client_status.appendRow(client_update_status) self.__client_update_status.setModel(self.__model_client_status) self.__client_update_status.repaint() # @pyqtSlot(str, name='signal_incoming_msg') def __print_msg(self, msg): msg = QStandardItem(msg) self.__model_chart_list.appendRow(msg) self.__msg_window.setModel(self.__model_chart_list) def __on_clicked(self): msg = self.__msg_input.text() self.__client.send_msg(msg) self.__msg_input.clear() def keyPressEvent(self, event): # print(event.key()) # print(Qt.Key_Enter) if event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return: self.__on_clicked()
class UI(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Mailbox") conn = sqlite3.connect('test.db') cursor = conn.execute("SELECT COUNT(*) from MAILS") self.totalMailCount = cursor.fetchone()[0] self.currentPage = 1 self.mailItemList = [] self.mailListModel = QStandardItemModel() self.fetchFromDB(self.currentPage) self.initUI() def fetchFromDB(self, page, mailboxName): conn = sqlite3.connect('test.db') pageOffset = str((page - 1) * 20 + 1) cursor = conn.execute("SELECT * from ? LIMIT 20 OFFSET ?", ( mailboxName + "mails", pageOffset, )) self.mailItemList = [] self.mailListModel.removeRows(0, self.mailListModel.rowCount()) rowNum = 0 for row in cursor: mailItem = QStandardItem() mailItem.setEditable(False) mailItem.setData(False, roles['checked']) try: mailItem.setData(str(DecryptData(row[2]), encoding='utf-8'), roles['from']) except: mailItem.setData(str(DecryptData(row[2]), encoding='GBK'), roles['from']) try: mailItem.setData(str(DecryptData(row[1]), encoding='utf-8'), roles['subject']) except: mailItem.setData(str(DecryptData(row[1]), encoding='GBK'), roles['subject']) try: mailItem.setData(str(DecryptData(row[6]), encoding='utf-8'), roles['content']) except: mailItem.setData(str(DecryptData(row[6]), encoding='GBK'), roles['content']) try: mailItem.setData(str(DecryptData(row[4]), encoding='utf-8'), roles['date']) except: mailItem.setData(str(DecryptData(row[4]), encoding='GBK'), roles['date']) self.mailItemList.append(mailItem) self.mailListModel.appendRow(self.mailItemList[rowNum]) rowNum += 1 def initUI(self): menubar = self.menuBar() menubar.addMenu('&File') menubar.addMenu('&Edit') menubar.addMenu('&View') windowLayout = QHBoxLayout() self.mailListView = QListView() viewDelegate = mailViewDelegate() self.mailListView.setModel(self.mailListModel) self.mailListView.setItemDelegate(viewDelegate) self.mailListView.clicked.connect(self.itemClicked) self.lastPageButton = QPushButton() self.lastPageButton.setText("上一页") self.lastPageButton.clicked.connect(self.lastPageButtonClicked) if self.currentPage == 1: self.lastPageButton.setEnabled(False) self.pageCount = QLabel() self.pageCount.setText(str(self.currentPage)) self.nextPageButton = QPushButton() self.nextPageButton.setText("下一页") self.nextPageButton.clicked.connect(self.nextPageButtonClicked) if self.currentPage * 20 >= self.totalMailCount: self.nextPageButton.setEnabled(False) buttonLayout = QHBoxLayout() buttonLayout.addStretch(1) buttonLayout.addWidget(self.lastPageButton) buttonLayout.addWidget(self.pageCount) buttonLayout.addWidget(self.nextPageButton) buttonBoxView = QWidget() buttonBoxView.setLayout(buttonLayout) viewLeft = QWidget() layoutLeft = QVBoxLayout() layoutLeft.addWidget(self.mailListView) layoutLeft.addWidget(buttonBoxView) viewLeft.setLayout(layoutLeft) windowLayout.addWidget(viewLeft) self.mailSubject = QLabel() self.mailSubject.setText(self.mailItemList[0].data(roles['subject'])) qFont1 = QFont("Helvetica") qFont1.setBold(True) qFont1.setPointSize(15) self.mailSubject.setFont(qFont1) self.mailFrom = QLabel() self.mailFrom.setText("发件人:" + self.mailItemList[0].data(roles['from'])) qFont2 = QFont("serif") qFont2.setBold(False) qFont2.setPointSize(10) self.mailFrom.setFont(qFont2) self.mailDate = QLabel() self.mailDate.setText("时 间:" + self.mailItemList[0].data(roles['date'])) qFont2 = QFont("serif") qFont2.setBold(False) qFont2.setPointSize(10) self.mailDate.setFont(qFont2) self.webView = QWebEngineView() self.webView.setHtml(self.mailItemList[0].data(roles['content'])) layoutRight = QVBoxLayout() layoutRight.addWidget(self.mailSubject) layoutRight.addWidget(self.mailFrom) layoutRight.addWidget(self.mailDate) layoutRight.addWidget(self.webView) viewRight = QWidget() viewRight.setLayout(layoutRight) windowLayout.addWidget(viewRight) windowView = QWidget() windowView.setLayout(windowLayout) self.setCentralWidget(windowView) # self.setLayout(windowLayout) def lastPageButtonClicked(self, checked): if self.currentPage > 1: self.currentPage -= 1 self.nextPageButton.setEnabled(True) self.pageCount.setText(str(self.currentPage)) self.fetchFromDB(self.currentPage) self.mailListView.repaint() if self.currentPage == 1: self.lastPageButton.setEnabled(False) def nextPageButtonClicked(self, checked): if self.currentPage * 20 < self.totalMailCount: self.currentPage += 1 self.lastPageButton.setEnabled(True) self.pageCount.setText(str(self.currentPage)) self.fetchFromDB(self.currentPage) self.mailListView.repaint() if self.currentPage * 20 >= self.totalMailCount: self.nextPageButton.setEnabled(False) def itemClicked(self, index): if index.model().data(index, roles['subject']) != self.mailSubject.text(): self.mailSubject.setText(index.model().data( index, roles['subject'])) self.mailFrom.setText("发件人:" + index.model().data(index, roles['from'])) self.mailDate.setText("时 间:" + index.model().data(index, roles['date'])) self.webView.setHtml(index.model().data(index, roles['content']))
class CardListWindow(QMainWindow): def __init__(self, app_context: ApplicationContext, flashcard_manager: FlashcardManager, *args, **kwargs): super(CardListWindow, self).__init__(*args, **kwargs) self.app_context = app_context self.flashcard_manager = flashcard_manager self.current_language = Language(0) self.setFixedSize(400, 600) self.setWindowTitle("Meine Lernkarteien - TangoCards") main_widget = QWidget() main_widget.setProperty("cssClass", "background") main_layout = QVBoxLayout() # Initialized up here because the combobox already fires the currentIndexChanged signal on creation self.card_list_model = QStringListModel(self.flashcard_manager.get_flashcard_list_names(self.current_language)) self.card_list = QListView() self.card_list.setEditTriggers(QAbstractItemView.NoEditTriggers) self.card_list.doubleClicked.connect(self.on_list_doubleclick) language_select = QComboBox() language_select.currentIndexChanged.connect(self.on_select_language) for language in Language: # if len(self.flashcard_manager.get_flashcard_lists(language)) < 1: # continue language_select.insertItem(language.value, language.get_display_name(), language.value) language_select.setItemIcon(language.value, QIcon(app_context.get_resource("icons/flag_" + language.name + ".png"))) main_layout.addWidget(language_select) main_layout.addWidget(self.card_list) tool_buttons_widget = QWidget() tool_buttons_layout = QHBoxLayout() tool_buttons_widget.setLayout(tool_buttons_layout) learn_button = QPushButton("Lernen") learn_button.clicked.connect(self.on_click_learn) add_button = QPushButton("Hinzufügen") add_button.clicked.connect(self.on_click_add) delete_button = QPushButton("Löschen") delete_button.clicked.connect(self.on_click_delete) tool_buttons_layout.addWidget(learn_button) tool_buttons_layout.addWidget(add_button) tool_buttons_layout.addWidget(delete_button) main_layout.addWidget(tool_buttons_widget) main_widget.setLayout(main_layout) self.setCentralWidget(main_widget) def on_select_language(self, language_id): self.current_language = Language(language_id) self.card_list_model = QStringListModel(self.flashcard_manager.get_flashcard_list_names(self.current_language)) self.card_list.setModel(self.card_list_model) self.card_list.repaint() def on_click_learn(self): if len(self.card_list.selectedIndexes()) < 1: return card_list = self.flashcard_manager.get_flashcard_list_by_name(self.current_language, self.card_list.selectedIndexes()[0].data()) window = ShowListWindow(self.app_context, self.flashcard_manager, card_list, parent=self) window.show() def on_click_add(self): text, ok = QInputDialog.getText(self, 'Lernkartei erstellen', 'Namen für die Lernkartei:') if ok: if text is None or len(text) < 2: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Der Name ist leer oder zu kurz!") msg.exec_() return self.flashcard_manager.create_list(self.current_language, text) self.on_select_language(self.current_language.value) # Update gui def on_click_delete(self): if len(self.card_list.selectedIndexes()) < 1: return list_name = self.card_list.selectedIndexes()[0].data() choice = QMessageBox.question(self, 'Löschen', "Willst du wirklich die Liste \"" + list_name + "\" löschen?", QMessageBox.Yes | QMessageBox.No) if choice == QMessageBox.Yes: self.flashcard_manager.delete_list(self.current_language, list_name) self.on_select_language(self.current_language.value) # Update gui def on_list_doubleclick(self, model_index: QModelIndex): card_list = self.flashcard_manager.get_flashcard_list_by_name(self.current_language, model_index.data()) window = ShowListWindow(self.app_context, self.flashcard_manager, card_list, parent=self) window.show()