from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QLabel, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QGridLayout, QLineEdit DEFAULT_CONTENT = "请输入人员编号" class Keyboard: def __init__(self): super().__init__() # 输入框的内容 self.editor_content = "" # 键盘输入框 self.id_label = self._init_id_label() self.id_editor = self._init_id_editor() # 输入框布局 self.input_layout = QHBoxLayout() self.input_layout.addWidget(self.id_label, 20) self.input_layout.addWidget(self.id_editor, 80) self.input_layout.setContentsMargins(0, 0, 0, 20) # 数字按键布局 self.number_grid_layout = QGridLayout() self.key_1 = self._init_key_button(name="1") self.key_2 = self._init_key_button(name="2") self.key_3 = self._init_key_button(name="3") self.key_4 = self._init_key_button(name="4") self.key_5 = self._init_key_button(name="5") self.key_6 = self._init_key_button(name="6") self.key_7 = self._init_key_button(name="7") self.key_8 = self._init_key_button(name="8") self.key_9 = self._init_key_button(name="9") self.key_0 = self._init_key_button(name="0") self.key_del = self._init_key_button(name="清空") # 设置按键响应 self.key_1.clicked.connect(self.update_content_func("1")) self.key_2.clicked.connect(self.update_content_func("2")) self.key_3.clicked.connect(self.update_content_func("3")) self.key_4.clicked.connect(self.update_content_func("4")) self.key_5.clicked.connect(self.update_content_func("5")) self.key_6.clicked.connect(self.update_content_func("6")) self.key_7.clicked.connect(self.update_content_func("7")) self.key_8.clicked.connect(self.update_content_func("8")) self.key_9.clicked.connect(self.update_content_func("9")) self.key_0.clicked.connect(self.update_content_func("0")) self.key_del.clicked.connect(self.delete_content) # 把按键加入网格 self.number_grid_layout.addWidget(self.key_1, 0, 0) self.number_grid_layout.addWidget(self.key_2, 0, 1) self.number_grid_layout.addWidget(self.key_3, 0, 2) self.number_grid_layout.addWidget(self.key_4, 1, 0) self.number_grid_layout.addWidget(self.key_5, 1, 1) self.number_grid_layout.addWidget(self.key_6, 1, 2) self.number_grid_layout.addWidget(self.key_7, 2, 0) self.number_grid_layout.addWidget(self.key_8, 2, 1) self.number_grid_layout.addWidget(self.key_9, 2, 2) self.number_grid_layout.addWidget(self.key_0, 3, 0) self.number_grid_layout.addWidget(self.key_del, 3, 1, 1, 2) # 给小键盘添加一个QWidget,用于设置小键盘的背景色 self.number_grid_widget = QWidget() self.number_grid_widget.setLayout(self.number_grid_layout) self.number_grid_widget.setStyleSheet( "border-radius: 4px;" "background-color: #f4f4f4;" ) self.number_grid_widget_layout = QVBoxLayout() self.number_grid_widget_layout.setContentsMargins(0, 0, 0, 0) self.number_grid_widget_layout.addWidget(self.number_grid_widget) # 布局 self.layout = QVBoxLayout() self.layout.addLayout(self.input_layout) self.layout.addLayout(self.number_grid_widget_layout) self.layout.setContentsMargins(0, 20, 0, 20) # 对外APi,获得当前输入框的内容 def get_content(self): return self.editor_content # 对外api:设置触发函数 def connect(self, func): self.id_editor.textChanged.connect(func) def get_layout(self): return self.layout def update_content_func(self, new_content): def _update_func(): # 如果内容里面不是数字 if not self.editor_content.isdigit(): self.editor_content = new_content else: self.editor_content += new_content self.id_editor.setText(self.editor_content) self.id_editor.setStyleSheet( "font: 28px \"Microsoft YaHei UI\";" "letter-spacing: 2px;" "color: #222222;" "padding-left: 8px;" "border: 1px solid #222222;" "border-radius: 4px;" ) return _update_func def delete_content(self): self.editor_content = "" self.id_editor.setText(DEFAULT_CONTENT) self.id_editor.setStyleSheet( "font: 26px \"Microsoft YaHei UI\";" "color: #8a8a8a;" "padding-left: 8px;" "border: 1px solid #222222;" "border-radius: 4px;" ) @staticmethod def _init_id_label(): id_label = QLabel("编号:") id_label.setAlignment(Qt.AlignCenter) id_label.setStyleSheet( "font: 28px \"Microsoft YaHei UI\";" "letter-spacing: 4px;" ) return id_label @staticmethod def _init_id_editor(): input_id_label = QLineEdit(DEFAULT_CONTENT) input_id_label.setEnabled(False) input_id_label.setFixedHeight(60) input_id_label.setStyleSheet( "font: 26px \"Microsoft YaHei UI\";" "color: #8a8a8a;" "padding-left: 8px;" "border-radius: 4px;" ) return input_id_label @staticmethod def _init_key_button(name): key_button = QPushButton(name) key_button.setStyleSheet( "font: 500 45px \"Microsoft YaHei UI\";" "background-color: #ffffff;" "height: 150%;" "border: none;" "border-radius: 4px;" "margin: 4 4 4 4;" ) return key_button