153 lines
5.8 KiB
Python
153 lines
5.8 KiB
Python
|
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
|
|||
|
|
|||
|
|