LISHUZUOXUN_yangjiang/LSZXPagesLibrary/keyboard_layout.py

153 lines
5.8 KiB
Python
Raw Normal View History

2024-09-23 14:54:15 +08:00
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