yxxxzx123 发表于 2024-3-13 08:37:25

Pyside6求教~

Pyside6中,请问如何设置TextEdit中的行间距?

FishC 发表于 2024-3-13 08:37:40

在PySide6中,可以通过设置QTextEdit的文本格式来设置行间距。下面是一个设置行间距的示例代码:

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

app = QApplication([])

window = QMainWindow()
text_edit = QTextEdit(window)

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

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

window.show()

app.exec()

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

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

希望对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yxxxzx123 发表于 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)

FishC 发表于 2024-3-13 08:44:14

yxxxzx123 发表于 2024-03-13 08:43
怎么报错了:

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

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

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

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

app = QApplication()
window = QMainWindow()
text_edit = QTextEdit(window)

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

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

window.show()
app.exec()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yxxxzx123 发表于 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'

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yxxxzx123 发表于 2024-3-13 08:49:06

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

回复请注意python格式

FishC 发表于 2024-3-13 08:49:17

yxxxzx123 发表于 2024-03-13 08:49
回复请注意python格式

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

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

app = QApplication()
window = QMainWindow()
text_edit = QTextEdit(window)

# 设置文本样式表
text_style = '''
    QTextEdit {
      line-height: 20px;
    }
'''
text_edit.setStyleSheet(text_style)

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

window.show()
app.exec()

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yxxxzx123 发表于 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']


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

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

FishC 发表于 2024-3-13 11:40:06

yxxxzx123 发表于 2024-03-13 11:39
可能我没有把问题描述清楚:

我是把终端print内容 ...

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

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

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

    def write(self, text):
      self.newText.emit(str(text))
      
app = QApplication(sys.argv)
window = QMainWindow()
text_edit = QTextEdit(window)

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

sys.stdout = stream

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

window.show()
sys.exit(app.exec())

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yxxxzx123 发表于 2024-3-13 11:45:09

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

刚才没打完字。麻烦看第9#楼回复。

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yxxxzx123 发表于 2024-3-13 11:47:20

这句我已经设置过了:self.textEdit_5.setStyleSheet("font-family:'隶书'; font-size:17pt; line-height: 20px;"),但没有用,显示出来就是9#楼那个样子。。。。

FishC 发表于 2024-3-13 11:47:44

yxxxzx123 发表于 2024-03-13 11:47
这句我已经设置过了:self.textEdit_5.setStyleSheet( ...

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

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

class CustomTextEdit(QTextEdit):
    def __init__(self, parent=None):
      super().__init__(parent)
      self.setStyleSheet("font-family:'隶书'; font-size:17pt;")# 设置字体和字号
   
    def setLineSpacing(self, spacing):
      fm = QFontMetrics(self.currentFont())
      self.setFixedHeight(fm.lineSpacing() + spacing)# 设置固定高度
      
    def appendText(self, text):
      cursor = self.textCursor()
      cursor.movePosition(QTextCursor.End)
      cursor.insertText(text)
      self.setTextCursor(cursor)

app = QApplication([])
window = QMainWindow()
text_edit = CustomTextEdit(window)
text_edit.setLineSpacing(6)# 设置行间距为6像素
text_edit.appendText("该目标文件夹下共有 5 个工作簿。分别是:")
window.setCentralWidget(text_edit)
window.show()
app.exec()

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Pyside6求教~