鱼C论坛

 找回密码
 立即注册
查看: 210|回复: 13

Pyside6求教~

[复制链接]
发表于 2024-3-13 08:37:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Pyside6中,请问如何设置TextEdit中的行间距?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-13 08:37:40 | 显示全部楼层
在PySide6中,可以通过设置QTextEdit的文本格式来设置行间距。下面是一个设置行间距的示例代码:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit
  2. from PySide6.QtGui import QFont, QTextBlockFormat
  3. from PySide6.QtCore import Qt

  4. app = QApplication([])

  5. window = QMainWindow()
  6. text_edit = QTextEdit(window)

  7. # 设置文本格式
  8. text_format = QTextBlockFormat()
  9. text_format.setLineHeight(30, QFont.Normal)  # 设置行高为30像素
  10. text_edit.document().setDefaultTextOption(text_format)

  11. # 添加文本内容
  12. text_edit.setText("Hello, World!\nThis is a test text.")

  13. window.show()

  14. app.exec()
复制代码


上述代码中,我们使用`QTextBlockFormat`类设置了行高为30像素。通过调用`setDefaultTextOption()`方法,将设置应用于`text_edit`中的文本内容。

你可以根据需要修改行高的数值,以及其他相关的文本格式选项。

希望对你有所帮助!

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

使用道具 举报

 楼主| 发表于 2024-3-13 08:43:57 | 显示全部楼层
FishC 发表于 2024-3-13 08:37
在PySide6中,可以通过设置QTextEdit的文本格式来设置行间距。下面是一个设置行间距的示例代码:

怎么报错了:

self.textEdit_5.document().setDefaultTextOption(text_format)
TypeError: 'PySide6.QtGui.QTextDocument.setDefaultTextOption' called with wrong argument types:
  PySide6.QtGui.QTextDocument.setDefaultTextOption(QTextBlockFormat)
Supported signatures:
  PySide6.QtGui.QTextDocument.setDefaultTextOption(Union[PySide6.QtGui.QTextOption, PySide6.QtCore.Qt.AlignmentFlag])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-13 08:44:14 | 显示全部楼层
yxxxzx123 发表于 2024-03-13 08:43
怎么报错了:

self.textEdit_5.document().setDefa ...


非常抱歉,我之前提供的代码有误。在PySide6中,默认的文本选项`setDefaultTextOption()`方法不支持直接传入`QTextBlockFormat`对象。

要设置行间距,可以使用以下方法:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit
  2. from PySide6.QtGui import QFont, QTextOption

  3. app = QApplication()
  4. window = QMainWindow()
  5. text_edit = QTextEdit(window)

  6. text_option = QTextOption()
  7. text_option.setLineSpacing(8)  # 设置行间距为8像素
  8. text_edit.document().setDefaultTextOption(text_option)

  9. # 添加文本内容
  10. text_edit.setText("Hello, World!\nThis is a test text.")

  11. window.show()
  12. app.exec()
复制代码


上面的代码中,我们使用`QTextOption`类来设置行间距。通过调用`setLineSpacing()`方法,我们将行间距设置为8像素。希望这次可以解决你的问题!如果还有其他问题,请随时向我提问。

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

使用道具 举报

 楼主| 发表于 2024-3-13 08:46:45 | 显示全部楼层
FishC 发表于 2024-3-13 08:44
非常抱歉,我之前提供的代码有误。在PySide6中,默认的文本选项`setDefaultTextOption()`方法不支持直 ...

。。。还是报错:

text_option.setLineSpacing(8)  # 设置行间距为8像素
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'PySide6.QtGui.QTextOption' object has no attribute 'setLineSpacing'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-13 08:47:02 | 显示全部楼层
yxxxzx123 发表于 2024-03-13 08:46
。。。还是报错:

text_option.setLineSpacing(8)  ...


非常抱歉,我犯了一个错误。在PySide6中,确实没有直接设置行间距的方法。但是我们可以通过设置文本样式表来间接地实现行间距的效果。下面是修正后的代码示例:from PySide6.QtWidgets import QApplication, QMainWindow, QTextEditfrom PySide6.QtGui import QFontapp = QApplication()window = QMainWindow()text_edit = QTextEdit(window)# 设置文本样式表text_style = "QTextEdit { line-height: 20px; }"  # 设置行高为20像素text_edit.setStyleSheet(text_style)# 添加文本内容text_edit.setText("Hello, World!\nThis is a test text.")window.show()app.exec()在上述代码中,我们使用`setStyleSheet()`方法来设置文本的样式表。通过设置`line-height`属性,我们将行高设置为20像素。你可以根据需要调整行高的数值。请注意,这种方式仅适用于纯文本的情况,如果需要对富文本应用行间距,则需要使用其他方法。希望这次能够解决你的问题!如果还有其他疑问,请随时向我提问。

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

使用道具 举报

 楼主| 发表于 2024-3-13 08:49:06 | 显示全部楼层
FishC 发表于 2024-3-13 08:47
非常抱歉,我犯了一个错误。在PySide6中,确实没有直接设置行间距的方法。但是我们可以通过设置文本样 ...

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

使用道具 举报

发表于 2024-3-13 08:49:17 | 显示全部楼层
yxxxzx123 发表于 2024-03-13 08:49
回复请注意python格式


非常抱歉给您带来困扰。以下是使用正确的Python代码格式进行修正的示例:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit
  2. from PySide6.QtGui import QFont

  3. app = QApplication()
  4. window = QMainWindow()
  5. text_edit = QTextEdit(window)

  6. # 设置文本样式表
  7. text_style = '''
  8.     QTextEdit {
  9.         line-height: 20px;
  10.     }
  11. '''
  12. text_edit.setStyleSheet(text_style)

  13. # 添加文本内容
  14. text_edit.setText("Hello, World!\nThis is a test text.")

  15. window.show()
  16. app.exec()
复制代码


希望这次的回答能够帮助到您。如果还有其他问题,请随时提问!

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

使用道具 举报

 楼主| 发表于 2024-3-13 11:39:48 | 显示全部楼层
本帖最后由 yxxxzx123 于 2024-3-13 11:44 编辑
FishC 发表于 2024-3-13 08:49
非常抱歉给您带来困扰。以下是使用正确的Python代码格式进行修正的示例:


可能我没有把问题描述清楚:

我是把终端print内容转到TextEdit中来显示 。

然后在TextEdit中显示出来的内容行间距很高,比如说我print('该目标文件夹下共有', len(self.File_List), '个工作簿。分别是:', self.File_List) ,

显示出来的就是:

E:/Test/统计表0


该目标文件夹下共有

5

个工作簿。分别是:

['1.xls', '2.xls', '3.xls', '4.xls', '5.xls']


第二步,请点击左侧。。。。

行间距都很高,感觉特别不协调。   请问这行间距能调整不?

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

使用道具 举报

发表于 2024-3-13 11:40:06 | 显示全部楼层
yxxxzx123 发表于 2024-03-13 11:39
可能我没有把问题描述清楚:

我是把终端print内容 ...


非常抱歉对问题理解有误。如果你想将终端中的print内容转到QTextEdit中进行显示,可以使用重定向sys.stdout。下面是一个示例代码:

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

  3. class Stream(QtCore.QObject):
  4.     newText = QtCore.Signal(str)

  5.     def write(self, text):
  6.         self.newText.emit(str(text))
  7.         
  8. app = QApplication(sys.argv)
  9. window = QMainWindow()
  10. text_edit = QTextEdit(window)

  11. stream = Stream()
  12. stream.newText.connect(text_edit.append)

  13. sys.stdout = stream

  14. # 以下为你要执行的print语句
  15. print("Hello, World!")
  16. print("This is a test.")

  17. window.show()
  18. sys.exit(app.exec())
复制代码


在这个示例中,我们创建了一个自定义的Stream类,它继承自QObject,并重写了write方法。该write方法会将收到的文本信号通过newText信号发射出去。然后,我们将sys.stdout重定向为这个自定义的Stream对象。在print语句执行时,文本会被发送到newText信号中,从而追加到QTextEdit中进行显示。

希望这次的回答能够帮助到你。如果还有其他问题,请随时提问!

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

使用道具 举报

 楼主| 发表于 2024-3-13 11:45:09 | 显示全部楼层
FishC 发表于 2024-3-13 11:40
非常抱歉对问题理解有误。如果你想将终端中的print内容转到QTextEdit中进行显示,可以使用重定向sys.st ...

刚才没打完字。  麻烦看第9#楼回复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-13 11:45:26 | 显示全部楼层
yxxxzx123 发表于 2024-03-13 11:45
刚才没打完字。  麻烦看第9#楼回复。


非常抱歉,我之前的回答没有解决你的问题。对于TextEdit中显示的行间距问题,可以使用样式表来进行调整。下面是一个示例代码:from PySide6.QtWidgets import QApplication, QMainWindow, QTextEditapp = QApplication([])window = QMainWindow()text_edit = QTextEdit(window)# 设置样式表text_edit.setStyleSheet("QTextEdit { line-height: 20px; }")# 添加文本内容text_edit.setText("该目标文件夹下共有 5 个工作簿。分别是:")window.show()app.exec()在这个示例中,使用了setStyleSheet方法来设置QTextEdit的样式表。通过设置line-height属性,可以调整行间距的大小。你可以尝试修改20px这个数值,看看效果是否符合你的需求。希望这次的回答能够解决你的问题。如果还有其他问题,请随时提问!

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

使用道具 举报

 楼主| 发表于 2024-3-13 11:47:20 | 显示全部楼层
这句我已经设置过了:self.textEdit_5.setStyleSheet("font-family:'隶书'; font-size:17pt; line-height: 20px;"),但没有用,显示出来就是9#楼那个样子。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-13 11:47:44 | 显示全部楼层
yxxxzx123 发表于 2024-03-13 11:47
这句我已经设置过了:self.textEdit_5.setStyleSheet( ...


非常抱歉之前的回答没有解决你的问题。在PySide6中,QTextEdit控件的样式表并不支持直接设置行间距。不过,我们可以通过自定义QTextEdit的子类来实现设置行间距的功能。下面是一个示例代码:

  1. from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit
  2. from PySide6.QtGui import QFontMetrics, QTextCursor

  3. class CustomTextEdit(QTextEdit):
  4.     def __init__(self, parent=None):
  5.         super().__init__(parent)
  6.         self.setStyleSheet("font-family:'隶书'; font-size:17pt;")  # 设置字体和字号
  7.    
  8.     def setLineSpacing(self, spacing):
  9.         fm = QFontMetrics(self.currentFont())
  10.         self.setFixedHeight(fm.lineSpacing() + spacing)  # 设置固定高度
  11.         
  12.     def appendText(self, text):
  13.         cursor = self.textCursor()
  14.         cursor.movePosition(QTextCursor.End)
  15.         cursor.insertText(text)
  16.         self.setTextCursor(cursor)

  17. app = QApplication([])
  18. window = QMainWindow()
  19. text_edit = CustomTextEdit(window)
  20. text_edit.setLineSpacing(6)  # 设置行间距为6像素
  21. text_edit.appendText("该目标文件夹下共有 5 个工作簿。分别是:")
  22. window.setCentralWidget(text_edit)
  23. window.show()
  24. app.exec()
复制代码


在上述代码中,我们自定义了一个名为CustomTextEdit的子类,重写了setLineSpacing方法和appendText方法。setLineSpacing方法用于设置行间距,通过调整QTextEdit的固定高度实现。appendText方法用于追加文本内容,并保持滚动到文本的末尾。

使用CustomTextEdit替代原来的QTextEdit,并调用setLineSpacing方法设置行间距,应该可以达到你想要的效果。希望这次的回答对您有帮助!如果还有其他问题,请随时提问。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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