非常抱歉之前的代码有一处错误。实际上,我们需要将QPlainTextEdit命名为self.plainTextEdit,所以在创建对象时我们应使用self.plainTextEdit而不是self.text_edit。以下是修正后的代码:
from PySide6.QtWidgets import QApplication, QMainWindow, QPlainTextEdit, QPushButton, QInputDialog, QVBoxLayout, QWidget
from PySide6.QtCore import Qt, QEvent
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.exclude_rows = []
# 创建 QPlainTextEdit 和 QPushButton
self.plainTextEdit = QPlainTextEdit(self)
self.plainTextEdit.setPlainText("请在《汇总表》的工作表中输入行号(从1开始计数,以逗号隔开,例如:1,2,3):")
self.plainTextEdit.setReadOnly(True)
self.button = QPushButton("录入结束", self)
self.button.clicked.connect(self.show_input_dialog)
# 创建一个垂直布局,并将 QPlainTextEdit 和 QPushButton 添加到布局中
layout = QVBoxLayout()
layout.addWidget(self.plainTextEdit)
layout.addWidget(self.button)
# 创建一个 QWidget,并将布局设置为其布局
widget = QWidget()
widget.setLayout(layout)
# 将 QWidget 设置为主窗口的中心部件
self.setCentralWidget(widget)
# 安装事件过滤器,监听 QPlainTextEdit 的键盘事件
self.plainTextEdit.installEventFilter(self)
def eventFilter(self, obj, event):
if obj is self.plainTextEdit 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):
rows_input, ok = QInputDialog.getText(self, "输入行号", "请输入行号(以逗号隔开):")
if ok:
# 将用户输入的行号转换为整数列表
rows = [int(row.strip()) for row in rows_input.split(",") if row.strip().isdigit()]
# 检查输入的行号是否在有效范围内(小于等于总行数)
total_rows = Exclud_Book.sheet_by_index(0).nrows # 假设需要获取第一个工作表的总行数
valid_rows = [row for row in rows if 1 <= row <= total_rows]
self.exclude_rows = valid_rows
print('用户录入的内容是:', self.exclude_rows)
app = QApplication()
window = MyWindow()
window.show()
app.exec()
上述代码进行了修正,并针对事件过滤器和用户输入的行号进行了相应的处理。请注意确认代码中的Exclud_Book.sheet_by_index(0).nrows是否正确获取工作表的总行数。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |