Ejemplo n.º 1
0
    def confirm_send(self):

        if self.radio_button_change.isChecked():
            if self.edit_label_score.text() == "":
                self.label_hint.setText("Please enter the score")

            else:
                self.modify_data["scores_dict"][
                    self.combo_box_score.currentText(
                    )] = self.edit_label_score.text()

                self.execute_confirm = ExcuteCommand(command="modify",
                                                     data=self.modify_data)
                self.execute_confirm.start()
                self.execute_confirm.return_sig.connect(
                    self.confirm_action_result)  #將信號連接到指定槽函數

        elif self.radio_button_add.isChecked():
            if self.edit_label_subject.text() == "":
                self.label_hint.setText("Please enter the subject's name")

            elif self.edit_label_score_2.text() == "":
                self.label_hint.setText("Please enter the {}'s score".format(
                    self.edit_label_subject.text()))

            else:
                self.modify_data["scores_dict"][self.edit_label_subject.text(
                )] = self.edit_label_score_2.text()

                self.execute_confirm = ExcuteCommand(command="modify",
                                                     data=self.modify_data)
                self.execute_confirm.start()
                self.execute_confirm.return_sig.connect(
                    self.confirm_action_result)  #將信號連接到指定槽函數
Ejemplo n.º 2
0
    def confirm_send(self):
        if self.query_name and self.input_subject :
            self.hint_label.setText(str(self.stu_list))
            self.input_name = False
            self.input_subject = False
            self.edit_name_label.setText("Name")
            self.edit_subject_label.setText("Subject")
            self.edit_score_label.clear()
            self.button_add.setEnabled(False)


            #print(self.stu_list)
            self.execute_send = ExcuteCommand(command = "add", data = self.stu_list)
            self.execute_send.start()
            self.execute_send.return_sig.connect(self.send_action_result)  #將信號連接到指定槽函數
            
        else :
            self.hint_label.setText("Please input correct information.")
Ejemplo n.º 3
0
    def confirm_query(self):

        if (self.edit_label_name.text() == ""):  #"name"如果是空字串就要再輸入一次
            self.label_hint.setText("Please enter name for student.")

        else:

            self.button_query.setEnabled(False)
            self.stu_list["name"] = self.edit_label_name.text()
            self.stu_list["scores"] = {}
            print("self.stu_list : {}".format(self.stu_list))

            self.query_name = True

            self.execute_query = ExcuteCommand(command="query",
                                               data=self.stu_list)
            self.execute_query.start()
            self.execute_query.return_sig.connect(
                self.query_action_result)  #將信號連接到指定槽函數
Ejemplo n.º 4
0
class ModifyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName("modify_stu_widget")
        self.stu_list = {}
        self.stu_list["name"] = {}
        self.stu_list["scores"] = {}
        self.query_name = False

        self.modify_data = {}
        self.modify_data["stu_id"] = {}
        self.modify_data["scores_dict"] = {}

        layout = QtWidgets.QVBoxLayout()

        self.label_hint = HintLabelComponent(15, "")

        #Name
        layout_name = QtWidgets.QGridLayout()
        self.screen_name = QtWidgets.QWidget()
        self.screen_name.setLayout(layout_name)

        label_name = LabelComponent(16, "Name: ")

        self.edit_label_name = LineEditComponent("Name")
        self.edit_label_name.mousePressEvent = self.press_edit_label_name_action

        self.button_query = ButtonComponent("Query")
        self.button_query.clicked.connect(self.confirm_query)

        layout_name.addWidget(label_name, 0, 0, 1, 1)
        layout_name.addWidget(self.edit_label_name, 0, 1, 1, 1)
        layout_name.addWidget(self.button_query, 0, 2, 1, 1)

        #設定各別row所占的比例
        layout_name.setRowStretch(0, 1)
        #設定各別row所占的比例

        #設定各別col所占的比例
        layout_name.setColumnStretch(0, 1)
        layout_name.setColumnStretch(1, 2)
        layout_name.setColumnStretch(2, 1)
        #設定各別col所占的比例
        #Name

        #Change a current score
        layout_change = QtWidgets.QGridLayout()
        self.screen_change = QtWidgets.QWidget()
        self.screen_change.setLayout(layout_change)

        self.radio_button_change = QtWidgets.QRadioButton(
            'Change a current score:')

        self.edit_label_score = LineEditComponent("")
        self.edit_label_score.mousePressEvent = self.press_edit_label_score_action

        self.combo_box_score = QtWidgets.QComboBox()
        self.combo_box_score.addItems(list())
        self.combo_box_score.currentIndexChanged.connect(
            self.combo_box_select_changed)

        layout_change.addWidget(self.radio_button_change, 0, 0, 1, 1)

        layout_change.addWidget(self.combo_box_score, 1, 0, 1, 1)
        layout_change.addWidget(self.edit_label_score, 1, 1, 1, 1)

        #設定各別row所占的比例
        layout_change.setRowStretch(0, 1)
        layout_change.setRowStretch(1, 1)
        #設定各別row所占的比例

        #設定各別col所占的比例
        layout_change.setColumnStretch(0, 1)
        layout_change.setColumnStretch(1, 4)
        layout_change.setColumnStretch(2, 1)
        #設定各別col所占的比例

        #Change a current score

        #Add a new score
        layout_add = QtWidgets.QGridLayout()
        self.screen_add = QtWidgets.QWidget()
        self.screen_add.setLayout(layout_add)

        self.radio_button_add = QtWidgets.QRadioButton('Add a new score')
        label_subject = LabelComponent(16, "Subject: ")

        self.edit_label_subject = LineEditComponent("Subject")
        self.edit_label_subject.mousePressEvent = self.press_edit_label_subject_action

        label_score = LabelComponent(16, "Score: ")

        self.edit_label_score_2 = LineEditComponent("Score")
        self.edit_label_score_2.mousePressEvent = self.press_edit_label_score_2_action

        layout_add.addWidget(self.radio_button_add, 0, 0, 1, 1)

        layout_add.addWidget(label_subject, 1, 0, 1, 2)
        layout_add.addWidget(self.edit_label_subject, 1, 1, 1, 1)

        layout_add.addWidget(label_score, 2, 0, 1, 2)
        layout_add.addWidget(self.edit_label_score_2, 2, 1, 1, 1)

        #設定各別row所占的比例
        layout_add.setRowStretch(0, 1)
        layout_add.setRowStretch(1, 1)
        layout_add.setRowStretch(2, 1)
        #設定各別row所占的比例

        #設定各別col所占的比例
        layout_add.setColumnStretch(0, 1)
        layout_add.setColumnStretch(1, 4)
        layout_add.setColumnStretch(2, 1)
        #設定各別col所占的比例
        #Add a new score

        #Confirm
        layout_confirm = QtWidgets.QGridLayout()
        self.screen_confirm = QtWidgets.QWidget()
        self.screen_confirm.setLayout(layout_confirm)

        self.button_confirm = ButtonComponent("Confirm")
        self.button_confirm.clicked.connect(self.confirm_send)

        layout_confirm.addWidget(self.button_confirm, 0, 1, 1, 1)

        #設定各別row所占的比例
        layout_confirm.setRowStretch(0, 1)
        #設定各別row所占的比例

        #設定各別col所占的比例
        layout_confirm.setColumnStretch(0, 4)
        layout_confirm.setColumnStretch(1, 1)
        #設定各別col所占的比例
        #Confirm

        self.radio_button_change.toggled.connect(
            self.radio_button_change_on_clicked)
        self.radio_button_add.toggled.connect(self.radio_button_add_on_clicked)

        layout.addWidget(self.label_hint, stretch=1)
        layout.addWidget(self.screen_name, stretch=1)
        layout.addWidget(self.screen_change, stretch=1)
        layout.addWidget(self.screen_add, stretch=1)
        layout.addWidget(self.screen_confirm, stretch=1)

        self.setLayout(layout)

    def init_action(self):
        self.label_hint.setText("")
        self.edit_label_name.setText("Name")
        self.edit_label_subject.setText("Subject")
        self.edit_label_score.clear()
        self.edit_label_score_2.setText("Score")
        self.button_query.setEnabled(False)
        self.button_confirm.setEnabled(False)

    def radio_button_change_on_clicked(self):
        selected_button = self.sender()
        if selected_button.isChecked():
            print("{}".format(selected_button.text()))
            self.radio_button_add.setChecked(False)  #將"radio_button_add"不要被選擇

    def radio_button_add_on_clicked(self):
        selected_button = self.sender()
        if selected_button.isChecked():
            print("{}".format(selected_button.text()))
            self.radio_button_change.setChecked(
                False)  #將"radio_button_change"不要被選擇

    def combo_box_select_changed(self, index):
        print("Index {} {} selected".format(
            index, self.combo_box_score.currentText()))

    def press_edit_label_name_action(self, event):
        self.edit_label_name.clear()
        self.button_query.setEnabled(True)
        self.query_name = False

    def press_edit_label_score_action(self, event):
        self.edit_label_score.clear()

        if self.query_name:
            self.button_confirm.setEnabled(True)
            self.radio_button_change.setChecked(True)
        else:
            self.label_hint.setText("Please query a new name first")

    def press_edit_label_subject_action(self, event):
        self.edit_label_subject.clear()

        if self.query_name:
            self.button_confirm.setEnabled(True)
            self.radio_button_add.setChecked(True)
        else:
            self.label_hint.setText("Please query a new name first")

    def press_edit_label_score_2_action(self, event):
        self.edit_label_score_2.clear()

        if self.query_name:
            self.button_confirm.setEnabled(True)
            self.radio_button_add.setChecked(True)
        else:
            self.label_hint.setText("Please query a new name first")

    def confirm_query(self):

        if (self.edit_label_name.text() == ""):  #"name"如果是空字串就要再輸入一次
            self.label_hint.setText("Please enter name for student.")

        else:

            self.button_query.setEnabled(False)
            self.stu_list["name"] = self.edit_label_name.text()
            self.stu_list["scores"] = {}
            print("self.stu_list : {}".format(self.stu_list))

            self.query_name = True

            self.execute_query = ExcuteCommand(command="query",
                                               data=self.stu_list)
            self.execute_query.start()
            self.execute_query.return_sig.connect(
                self.query_action_result)  #將信號連接到指定槽函數
            # self.socket_client.send_command("query", self.stu_list)  #先"send_command"
            # stu_raw_data = self.socket_client.wait_response()  #才會有"wait_response"

    def query_action_result(self, result):
        #"json.loads" : 將已編碼的JSON解碼為Python對象
        self.result = json.loads(result)

        if self.result["status"] == "OK":
            self.combo_box_score.clear()  #先全部清除
            self.combo_box_score.addItems(list(
                self.result["scores"].keys()))  #再增加項目

            self.modify_data["stu_id"] = self.result['stu_id']
            self.modify_data["scores_dict"] = self.result['scores']
            self.label_hint.setText("The student '{}' exists in DB".format(
                self.edit_label_name.text()))
            self.query_name = True

        else:
            self.label_hint.setText("The name {} is not found".format(
                self.edit_label_name.text()))

    def confirm_send(self):

        if self.radio_button_change.isChecked():
            if self.edit_label_score.text() == "":
                self.label_hint.setText("Please enter the score")

            else:
                self.modify_data["scores_dict"][
                    self.combo_box_score.currentText(
                    )] = self.edit_label_score.text()

                self.execute_confirm = ExcuteCommand(command="modify",
                                                     data=self.modify_data)
                self.execute_confirm.start()
                self.execute_confirm.return_sig.connect(
                    self.confirm_action_result)  #將信號連接到指定槽函數

        elif self.radio_button_add.isChecked():
            if self.edit_label_subject.text() == "":
                self.label_hint.setText("Please enter the subject's name")

            elif self.edit_label_score_2.text() == "":
                self.label_hint.setText("Please enter the {}'s score".format(
                    self.edit_label_subject.text()))

            else:
                self.modify_data["scores_dict"][self.edit_label_subject.text(
                )] = self.edit_label_score_2.text()

                self.execute_confirm = ExcuteCommand(command="modify",
                                                     data=self.modify_data)
                self.execute_confirm.start()
                self.execute_confirm.return_sig.connect(
                    self.confirm_action_result)  #將信號連接到指定槽函數

    def confirm_action_result(self, result):
        #"json.loads" : 將已編碼的JSON解碼為Python對象
        self.result = json.loads(result)

        if self.result["status"] == "OK":
            if self.radio_button_change.isChecked():
                stu_info = [
                    self.edit_label_name.text(),
                    self.combo_box_score.currentText(),
                    self.edit_label_score.text()
                ]
                self.label_hint.setText("Modify {} success".format(stu_info))

            elif self.radio_button_add.isChecked():
                stu_info = [
                    self.edit_label_name.text(),
                    self.edit_label_subject.text(),
                    self.edit_label_score_2.text()
                ]
                self.label_hint.setText("Add {} success".format(stu_info))

            self.combo_box_score.clear()  #先全部清除
            self.combo_box_score.addItems(
                list(self.modify_data["scores_dict"].keys()))  #再增加項目
Ejemplo n.º 5
0
 def check_stu_list(self) :
     self.check_send = ExcuteCommand(command = "show", data = dict())
     self.check_send.start()
     self.check_send.return_sig.connect(self.show_stu_list)  #將信號連接到指定槽函數
Ejemplo n.º 6
0
class ShowStuWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName("show_stu_widget")
        #self.check_stu_list()  #一開始就執行動作
        
        layout = QtWidgets.QVBoxLayout()
        header_label = LabelComponent(20, "Show Student")
        

        #"button_update"的設定
        self.button_update = ButtonComponent("Update Student's Info")
        self.button_update.clicked.connect(self.check_stu_list)
        self.button_update.setEnabled(True)
        #"button_update"的設定




        #創立"scroll_area"
        layout_scroll = QtWidgets.QVBoxLayout()  #增加"layout_scroll"

        self.stu_screen = QWidget()  #新增widget
        self.stu_screen.setMinimumSize(400, 200)  #設定size
        self.stu_screen.setLayout(layout_scroll)

        self.scroll_area = QScrollArea()  #新增scoll area
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area.setWidget(self.stu_screen)  #增加到widget裡 
        #創立"scroll_area"
        
        
        #增加label
        self.label_stu_list = LabelComponent(15, "")
        layout_scroll.addWidget(self.label_stu_list)
        #增加label
        
        
        #"layout"中增加widget;先增加的先出現
        layout.addWidget(header_label, stretch=0.5)
        layout.addWidget(self.button_update, stretch=0.5)
        layout.addWidget(self.scroll_area, stretch=0.5)
        #"layout"中增加widget;先增加的先出現

        self.setLayout(layout)  #顯示layout

    def check_stu_list(self) :
        self.check_send = ExcuteCommand(command = "show", data = dict())
        self.check_send.start()
        self.check_send.return_sig.connect(self.show_stu_list)  #將信號連接到指定槽函數
        

    def show_stu_list(self, result) :
        result = json.loads(result)

        student_list = result['parameters']  #提取"parameters"資料,也就是我們需要的"student_list"
        #self.hint_label.setText("Add {} successfully".format(self.stu_list))
        #print("self.stu_list : {}".format(student_list))

        #print ("\n==== student list ====")

        """
        self.label_stu_list_top = QtWidgets.QLabel(self.stu_screen)
        self.label_stu_list_top.setText("====== student list ======")
        self.label_stu_list_top.setFont(QtGui.QFont("微軟正黑體", 15, QtGui.QFont.Bold))
        """

        i = 1  #控制移動座標
        stu_list_content = "====== student list ======\n"
        for student_info in student_list :
            #print("student_info : \n{}".format(student_info))
            #print("\nName : {}".format(student_info["name"]))
            stu_list_content += "\nName : {}\n".format(student_info["name"])
            """
            #顯示name在GUI
            self.label_name = QtWidgets.QLabel(self.stu_screen)
            self.label_name.setText("Name : {}".format(student_info["name"]))
            self.label_name.setFont(QtGui.QFont("微軟正黑體", 15, QtGui.QFont.Bold))
            self.label_name.move(0, 40*i)  #移動座標
            #顯示name在GUI
            """

            i = i+1  #只要顯示一行,就要移動位置

            for subject in student_info["scores"] :

                scores = student_info["scores"]
                #print(type(subject))  #"str"
                #print("  subject : {}, score : {}".format(subject, scores[subject]))
                
                stu_list_content += "  subject : {}, score : {}\n".format(subject, scores[subject])
                """
                #顯示subject和score在GUI
                self.label_sub_n_score = QtWidgets.QLabel(self.stu_screen)
                self.label_sub_n_score.setText("    subject : {}, score : {}".format(subject, scores[subject]))
                self.label_sub_n_score.setFont(QtGui.QFont("微軟正黑體", 15, QtGui.QFont.Bold))
                self.label_sub_n_score.move(0, 40*i)
                i = i+1
                #顯示subject和score在GUI
                """

                #print(score.keys())

        #print ("\n======================")
        stu_list_content += "\n======================\n"

        self.label_stu_list.setText(stu_list_content)  #在GUI顯示"stu_list_content"
        #print(stu_list_content)
        """
        self.label_stu_list_bottom = QtWidgets.QLabel(self.stu_screen)
        self.label_stu_list_bottom.setText("======================")
        self.label_stu_list_bottom.setFont(QtGui.QFont("微軟正黑體", 15, QtGui.QFont.Bold))
        self.label_stu_list_bottom.move(0, 40*i)
        """

        
    def load(self):
        self.check_stu_list()
        print("show widget")
Ejemplo n.º 7
0
class AddStuWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName("add_stu_widget")
        #"stu_list"初始化
        self.stu_list = {}
        self.stu_list["name"] = {}
        self.stu_list["scores"] = {}
        #"stu_list"初始化


        self.query_name = False  #紀錄是否有輸入"name"且"query"過了
        self.input_subject = False  #紀錄是否有增加過"subject"和"score"了

        layout = QtWidgets.QGridLayout()  #相對的layout

        #設定widget
        header_label = LabelComponent(20, "Add Student")
        name_label = LabelComponent(16, "Name: ")
        subject_label = LabelComponent(16, "Subject: ")
        score_label = LabelComponent(16, "Score: ")
        self.hint_label = HintLabelComponent(15, "")

        self.edit_name_label = LineEditComponent("Name")
        self.edit_name_label.mousePressEvent = self.press_name_label_action
        
        self.edit_subject_label = LineEditComponent("Subject")
        self.edit_subject_label.mousePressEvent = self.press_subject_label_action

        self.edit_score_label = LineEditComponent()
        self.edit_score_label.mousePressEvent = self.press_score_label_action
        self.edit_score_label.setValidator(QtGui.QIntValidator(1, 100))  #限制只能輸入"int",且範圍在"三位數內"

        #"button_query"的設定
        self.button_query = ButtonComponent("Query")
        self.button_query.clicked.connect(self.confirm_query)
        #"button_query"的設定

        #"button_add"的設定
        self.button_add = ButtonComponent("Add")
        self.button_add.clicked.connect(self.confirm_add)
        #"button_add"的設定
        
        #"button_send"的設定
        self.button_send = ButtonComponent("Send")
        self.button_send.clicked.connect(self.confirm_send)
        self.button_send.setEnabled(True)  #初始設定將btn不能按,但"button_send"要可以按,所以設定為"True"
        #"button_send"的設定

        #設定widget
        

        #layout widget
        layout.addWidget(header_label, 0, 0, 1, 2)  #設定在(row, col)然後占用多少(row, col)
        layout.addWidget(name_label, 1, 0, 1, 1)
        layout.addWidget(subject_label, 2, 0, 1, 1)
        layout.addWidget(score_label, 3, 0, 1, 1)
        layout.addWidget(self.hint_label, 0, 3, 4, 2)
        layout.addWidget(self.edit_name_label, 1, 1, 1, 1)
        layout.addWidget(self.edit_subject_label, 2, 1, 1, 1)
        layout.addWidget(self.edit_score_label, 3, 1, 1, 1)
        layout.addWidget(self.button_query, 1, 2, 1, 1)
        layout.addWidget(self.button_add, 3, 2, 1, 1)
        layout.addWidget(self.button_send, 6, 3, 1, 1)
        #layout widget

        #設定各別col所占的比例
        layout.setColumnStretch(0, 2)  
        layout.setColumnStretch(1, 3)
        layout.setColumnStretch(2, 2)
        layout.setColumnStretch(3, 3.5)
        #設定各別col所占的比例

        #設定各別row所占的比例
        layout.setRowStretch(0, 1)
        layout.setRowStretch(1, 2)
        layout.setRowStretch(2, 2)
        layout.setRowStretch(3, 2)
        layout.setRowStretch(4, 2)
        layout.setRowStretch(5, 2)
        layout.setRowStretch(6, 2)
        #設定各別row所占的比例

        self.setLayout(layout)
    
    def load(self):
        print("add widget")

    def press_name_label_action(self, event):
        self.edit_name_label.clear()
        self.button_query.setEnabled(True)
        self.query_name = False
        self.button_add.setEnabled(False)
        
    def press_subject_label_action(self, event):
        self.edit_subject_label.clear()
        #print(self.edit_name_label.text())
        if not self.query_name : 
            self.hint_label.setText("Please query a new name first")

    def press_score_label_action(self, event):  
        self.edit_score_label.clear()
        if self.query_name : 
            self.button_add.setEnabled(True)
        else :
            self.hint_label.setText("Please query a new name first")


    def confirm_query(self) :

        if(self.edit_name_label.text() == "") :  #"name"如果是空字串就要再輸入一次
            self.hint_label.setText("Please enter name for student.")

        else :
            
            self.button_query.setEnabled(False)
            self.stu_list["name"] = self.edit_name_label.text()
            self.stu_list["scores"] = {}
            print("self.stu_list : {}".format(self.stu_list))
            self.query_name = True
            if(self.edit_subject_label.text() != "" and self.edit_score_label.text() != "") :
                self.button_add.setEnabled(True)
            
            
            self.execute_query = ExcuteCommand(command = "query", data = self.stu_list)
            self.execute_query.start()
            self.execute_query.return_sig.connect(self.query_action_result)  #將信號連接到指定槽函數
            # self.socket_client.send_command("query", self.stu_list)  #先"send_command"
            # stu_raw_data = self.socket_client.wait_response()  #才會有"wait_response"
    
    def query_action_result(self, result):
        #"json.loads" : 將已編碼的JSON解碼為Python對象
        result = json.loads(result)

        if result["status"] == "OK" :
            self.hint_label.setText("The student '{}' already exists in DB".format(self.edit_name_label.text()))
            self.query_name = False

        else :
            self.hint_label.setText("Please enter subjects for student '{}'".format(self.edit_name_label.text()))
        

    def confirm_add(self) :
        #print(type(self.edit_subject_label.text()))
        #print(type(self.edit_score_label.text()))
        if(self.query_name == False) :  #先確認有沒有"query_name"
            self.hint_label.setText("Please query a new name first")

        elif(self.edit_subject_label.text() == "") :  #要先輸入"subject"
            self.hint_label.setText("Please input student's subject first.")

        elif(self.edit_score_label.text() == "") :  #再輸入"score"
            self.hint_label.setText("Please enter student's {} grade.".format(self.edit_subject_label.text()))

        else :
            print(self.stu_list)
            self.stu_list["scores"][self.edit_subject_label.text()] = self.edit_score_label.text()
            
            self.hint_label.setText("Student {}'s subject '{}' with score '{}' added"
            .format(self.edit_name_label.text(), self.edit_subject_label.text(), self.edit_score_label.text()))
            self.input_subject = True
        

    def confirm_send(self):
        if self.query_name and self.input_subject :
            self.hint_label.setText(str(self.stu_list))
            self.input_name = False
            self.input_subject = False
            self.edit_name_label.setText("Name")
            self.edit_subject_label.setText("Subject")
            self.edit_score_label.clear()
            self.button_add.setEnabled(False)


            #print(self.stu_list)
            self.execute_send = ExcuteCommand(command = "add", data = self.stu_list)
            self.execute_send.start()
            self.execute_send.return_sig.connect(self.send_action_result)  #將信號連接到指定槽函數
            
        else :
            self.hint_label.setText("Please input correct information.")

    def send_action_result(self, result):
        #"json.loads" : 將已編碼的JSON解碼為Python對象
        result = json.loads(result)

        if result["status"] == "OK" :
            self.hint_label.setText("Add {} successfully".format(self.stu_list))
            self.stu_list = {}  #"self.stu_list"給reset掉
            print("self.stu_list : {}".format(self.stu_list))

        else :
            self.hint_label.setText("Add {} unsuccessfully".format(self.stu_list))