|
发表于 2024-3-19 10:02:43
|
显示全部楼层
当用户点击录入按钮时,可以通过代码触发一个事件来关闭中文输入法并切换至英文输入法。下面是示例代码的修改部分:
- from PySide6.QtWidgets import QApplication, QMainWindow, QPlainTextEdit, QPushButton, QInputDialog, QMessageBox
- from PySide6.QtCore import Qt, QEvent
- class MyWindow(QMainWindow):
- def __init__(self):
- super().__init__()
- self.exclude_rows = []
- self.text_edit = QPlainTextEdit(self)
- self.text_edit.setPlainText("请在《汇总表》的工作表中输入行号(从1开始计数,以逗号隔开,例如:1,2,3):")
- self.text_edit.setReadOnly(True)
- self.text_edit.setGeometry(10, 10, 280, 150)
- self.button = QPushButton("录入结束", self)
- self.button.setGeometry(10, 170, 100, 30)
- self.button.clicked.connect(self.show_input_dialog)
-
- def eventFilter(self, obj, event):
- if obj is self.text_edit and event.type() == QEvent.KeyPress:
- if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter:
- # 按下回车键时关闭中文输入法并切换至英文输入法
- QApplication.inputMethod().reset()
- QApplication.inputMethod().setInputMethodHints(Qt.ImhLatinOnly)
- return super().eventFilter(obj, event)
- def show_input_dialog(self):
- self.text_edit.installEventFilter(self) # 安装事件过滤器
- rows_input, ok = QInputDialog.getText(self, "输入行号", "请输入行号(以逗号隔开):")
- self.text_edit.removeEventFilter(self) # 移除事件过滤器
- if ok:
- rows = []
- for row in rows_input.split(','):
- try:
- row_num = int(row) - 1 # 因为要从0开始计数,所以减去1
- rows.append(row_num)
- except ValueError:
- QMessageBox.warning(self, "无效输入", "请确保输入的是整数,并用逗号分隔行号。")
- return
- total_rows = 10 # 假设总共有10行
- valid_rows = [row for row in rows if 0 <= row < total_rows]
- invalid_rows = [row for row in rows if row not in valid_rows]
- if invalid_rows:
- QMessageBox.warning(self, "无效行号", f"以下行号不在有效范围内:{invalid_rows}")
- else:
- self.exclude_rows = valid_rows
- print('用户录入的内容是:', self.exclude_rows)
- app = QApplication()
- window = MyWindow()
- window.show()
- app.exec()
复制代码
在代码中,我定义了一个`eventFilter`函数来拦截并处理文本编辑框的键盘事件。当用户按下回车键时,会调用`reset()`方法关闭中文输入法,并使用`setInputMethodHints()`方法切换至英文输入法。在按钮点击事件处理函数`show_input_dialog()`中,我通过`installEventFilter()`和`removeEventFilter()`方法来安装和移除事件过滤器,确保只有在录入过程中处理回车键事件。
请注意,对于不同的平台和输入法设置,可能需要进行进一步适配和测试。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|