Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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()