鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 凊风

QPlainTextEdit问题求教~~

[复制链接]
 楼主| 发表于 2024-3-19 08:45:08 | 显示全部楼层
FishC 发表于 2024-3-19 08:43
明白了,根据您的新需求,我对代码进行了修改。以下是更新的代码示例:from PyQt5.QtWidgets import QA ...

我是Pyside6。。。

回复请注意python格式和代码说明。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 08:45:26 | 显示全部楼层
凊风 发表于 2024-03-19 08:45
我是Pyside6。。。

回复请注意python格式和代码说 ...


非常抱歉,我没有注意到您使用的是PySide6。下面是使用PySide6的代码示例:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QInputDialog, QTextEdit
  2. import sys

  3. class MainWindow(QMainWindow):
  4.     def __init__(self):
  5.         super().__init__()
  6.         self.initUI()

  7.     def initUI(self):
  8.         self.setWindowTitle('信息录入')
  9.         self.setGeometry(300, 300, 400, 300)

  10.         self.button = QPushButton('录入信息', self)
  11.         self.button.clicked.connect(self.showInputDialog)
  12.         self.button.setGeometry(50, 50, 100, 30)

  13.     def showInputDialog(self):
  14.         text, ok = QInputDialog.getText(self, '输入信息', '请输入您的信息:', QLineEdit.Normal, "", flags=Qt.WindowCloseButtonHint)
  15.         if ok and text:
  16.             rows_num = self.getRowsNum()
  17.             input_list = self.processInput(text, rows_num)
  18.             if input_list:
  19.                 QMessageBox.information(self, '录入成功', '录入的内容为:\n' + '\n'.join(input_list))
  20.             else:
  21.                 QMessageBox.warning(self, '录入错误', '请输入有效的信息!')

  22.     def getRowsNum(self):
  23.         # 获取总行数,这里假设总行数为10
  24.         rows_num = 10
  25.         return rows_num

  26.     def processInput(self, text, rows_num):
  27.         exclude_rows_input, ok = QInputDialog.getText(self, '输入框设置', '请输入要排除的行数:', QLineEdit.Normal, "", flags=Qt.WindowCloseButtonHint)
  28.         if ok and exclude_rows_input:
  29.             exclude_rows_list = exclude_rows_input.split(',')
  30.             for row in exclude_rows_list:
  31.                 if not row.isdigit() or int(row) < 0 or int(row) >= rows_num:
  32.                     return None
  33.             return exclude_rows_list
  34.         return None

  35. if __name__ == '__main__':
  36.     app = QApplication(sys.argv)
  37.     mainWindow = MainWindow()
  38.     mainWindow.show()
  39.     sys.exit(app.exec())
复制代码


请注意,这段代码使用了PySide6库和Python的语法。我希望这次的回答能对您有所帮助。如果您还有其他问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 09:01:31 | 显示全部楼层
FishC 发表于 2024-3-19 08:45
非常抱歉,我没有注意到您使用的是PySide6。下面是使用PySide6的代码示例:

为什么这里要两个信息框?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 09:01:50 | 显示全部楼层
凊风 发表于 2024-03-19 09:01
为什么这里要两个信息框?


非常抱歉,我犯了一个错误。实际上,代码中的第二个`QInputDialog.getText`用于获取要排除的行数列表,我给出的解释是错误的。请忽略该部分代码并将 `self.processInput` 方法修改为以下内容:def processInput(self, text, rows_num):    input_list = text.split('\n')    return input_list根据新的代码,您只需要在文本框中输入多行文本,并将每行文本作为列表中的一个元素。然后,将这个列表传递给 `QMessageBox` 进行展示。如果有任何其他的疑问,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 09:12:44 | 显示全部楼层
FishC 发表于 2024-3-19 09:01
非常抱歉,我犯了一个错误。实际上,代码中的第二个`QInputDialog.getText`用于获取要排除的行数列表, ...

回复请注意python格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 09:12:50 | 显示全部楼层
凊风 发表于 2024-03-19 09:12
回复请注意python格式


非常抱歉,我没有按照Python的格式回复。下面是按照Python的格式修改后的代码:

  1. def processInput(self, text, rows_num):
  2.     input_list = text.split('\n')
  3.     return input_list
复制代码


感谢您的指正,并对我的错误回复表示歉意。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 09:15:15 | 显示全部楼层
FishC 发表于 2024-3-19 09:12
非常抱歉,我没有按照Python的格式回复。下面是按照Python的格式修改后的代码:

能否把第22#楼的代码整理、重发一下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 09:15:19 | 显示全部楼层
凊风 发表于 2024-03-19 09:15
能否把第22#楼的代码整理、重发一下?


当然可以,请见以下整理后的代码:

  1. def redirect_output(self, output_widget):
  2.     class StdoutRedirect:
  3.         def __init__(self, widget):
  4.             self.widget = widget

  5.         def write(self, text):
  6.             self.widget.insertPlainText(text)

  7.         def flush(self):
  8.             pass

  9.     sys.stdout = StdoutRedirect(output_widget)
复制代码


抱歉给您带来困惑,希望这次回答能够对您有所帮助。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-19 09:15:57 | 显示全部楼层
FishC 发表于 2024-3-19 09:15
当然可以,请见以下整理后的代码:

哈哈 ,看来你又迷糊了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-19 09:16:09 | 显示全部楼层
凊风 发表于 2024-03-19 09:15
哈哈 ,看来你又迷糊了


非常抱歉,我在上一次回答中犯了一个错误。QPlainTextEdit确实没有`append`方法,也不能直接使用`insertPlainText`来实现类似的功能。不过,我们可以通过重新设置文本内容来实现类似的效果。

请尝试使用以下修改后的代码:

  1. def redirect_output(self, output_widget):
  2.     class StdoutRedirect:
  3.         def __init__(self, widget):
  4.             self.widget = widget

  5.         def write(self, text):
  6.             cursor = self.widget.textCursor()
  7.             cursor.movePosition(QtGui.QTextCursor.End)
  8.             cursor.insertText(text)
  9.             self.widget.setTextCursor(cursor)
  10.             self.widget.ensureCursorVisible()

  11.         def flush(self):
  12.             pass

  13.     sys.stdout = StdoutRedirect(output_widget)
复制代码


这样修改后,应该就能够将输出文本逐行添加到QPlainTextEdit中了。希望这次的回答能够满足您的需求,如果还有其他问题,请随时提问。非常抱歉再次给您带来困扰。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表