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 __init__(self): super().__init__() self.setObjectName("modify_stu_widget") layout = QtWidgets.QVBoxLayout() header_label = LabelComponent(20, "Modify Student") self.modify_widget = ModifyWidget() layout.addWidget(header_label, stretch=1) layout.addWidget(self.modify_widget, stretch=8) self.setLayout(layout)
def __init__(self, ): super().__init__() self.setObjectName("main_widget") layout = QtWidgets.QGridLayout() header_label = LabelComponent(24, "Student Management System") function_widget = FunctionWidget() menu_widget = MenuWidget(function_widget.update_widget) layout.addWidget(header_label, 0, 0, 1, 2) layout.addWidget(menu_widget, 1, 0, 1, 1) layout.addWidget(function_widget, 1, 1, 1, 1) layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 6) layout.setRowStretch(0, 1) layout.setRowStretch(1, 6) self.setLayout(layout)
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)
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")
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)