凊风 发表于 2024-3-25 13:16:24

字体颜色设置求教~

现有如下打印语句:

print('成功《', Base_Workbook, '》并重命名为《123.xls》'),其中Base_Workbook为变量。

如果要设置 :'成功《'、

Base_Workbook

和‘》并重命名为《123.xls》’

为不同的颜色,用PySide6要怎么实现呢?

FishC 发表于 2024-3-25 13:16:38

在PySide6中,可以使用QTextCharFormat来设置文字的颜色。您可以按照以下步骤来实现所需效果:

首先,导入必要的模块:

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QTextCharFormat, QColor
from PySide6.QtCore import Qt

然后,在适当的地方创建一个QTextCharFormat对象,并为每个部分设置不同的颜色。例如:

# 创建QTextCharFormat对象
format = QTextCharFormat()

# 设置第一部分('成功《')的颜色为红色
format.setForeground(QColor(Qt.red))
print('成功《', end='')

# 恢复默认颜色
format.clearForeground()

接下来,可以使用变量`Base_Workbook`的值,如下所示:

# 设置Base_Workbook的颜色为蓝色
format.setForeground(QColor(Qt.blue))
print(Base_Workbook, end='')

# 恢复默认颜色
format.clearForeground()

最后,设置最后一部分('》并重命名为《123.xls》')的颜色为绿色,如下所示:

# 设置最后一部分的颜色为绿色
format.setForeground(QColor(Qt.green))
print('》并重命名为《123.xls》')

完整的代码示例如下:

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QTextCharFormat, QColor
from PySide6.QtCore import Qt

# 初始化应用程序
app = QApplication([])

# 创建QTextCharFormat对象
format = QTextCharFormat()

# 设置第一部分('成功《')的颜色为红色
format.setForeground(QColor(Qt.red))
print('成功《', end='')

# 恢复默认颜色
format.clearForeground()

# 设置Base_Workbook的颜色为蓝色
format.setForeground(QColor(Qt.blue))
Base_Workbook = 'example.xlsx'
print(Base_Workbook, end='')

# 恢复默认颜色
format.clearForeground()

# 设置最后一部分的颜色为绿色
format.setForeground(QColor(Qt.green))
print('》并重命名为《123.xls》')

# 退出应用程序
app.quit()

希望这个解答对您有所帮助!

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

凊风 发表于 2024-3-25 13:17:59

FishC 发表于 2024-3-25 13:16
在PySide6中,可以使用QTextCharFormat来设置文字的颜色。您可以按照以下步骤来实现所需效果:

首先,导 ...

能不能定义成一个函数来方便引用呢?

FishC 发表于 2024-3-25 13:18:09

凊风 发表于 2024-03-25 13:17
能不能定义成一个函数来方便引用呢?

当然可以!您可以将上述代码封装成一个函数,以便在需要的时候方便引用。以下是一个示例函数:

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QTextCharFormat, QColor
from PySide6.QtCore import Qt

def print_with_color_format(text, colors):
    app = QApplication()
    format = QTextCharFormat()

    for i, color in enumerate(colors):
      format.setForeground(QColor(color))
      print(text, end='')
      format.clearForeground()

    app.quit()

# 使用示例
text = '成功《Base_Workbook》并重命名为《123.xls》'
colors = ['red', 'blue', 'green']

print_with_color_format(text, colors)

在这个示例中,`text`是要打印的文本字符串,`colors`是一个包含每个部分颜色的列表。通过调用`print_with_color_format`函数,即可实现带有不同颜色的打印效果。

希望这样的函数能满足您的需求!

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

凊风 发表于 2024-3-25 13:21:05

FishC 发表于 2024-3-25 13:18
当然可以!您可以将上述代码封装成一个函数,以便在需要的时候方便引用。以下是一个示例函数:




这个函数能体现出来Base_Workbook是变量的情况吗?

FishC 发表于 2024-3-25 13:21:18

凊风 发表于 2024-03-25 13:21
这个函数能体现出来Base_Workbook是变量的情况吗?

非常抱歉,之前的函数确实没有考虑到`Base_Workbook`是一个变量的情况。为了体现出`Base_Workbook`是变量的值,我们可以对函数进行一些改进。以下是修改后的代码:

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QTextCharFormat, QColor
from PySide6.QtCore import Qt

def print_with_color_format(text, variable, colors):
    app = QApplication()
    format = QTextCharFormat()
   
    for i, color in enumerate(colors):
      format.setForeground(QColor(color))
      part = text
      
      if part == "variable":
            part = str(variable)
            
      print(part, end='')
      format.clearForeground()
   
    app.quit()

# 使用示例
text = ['成功《', 'variable', '》并重命名为《123.xls》']
colors = ['red', 'blue', 'green']
Base_Workbook = 'example.xlsx'

print_with_color_format(text, Base_Workbook, colors)

在此示例中,`text`是一个列表,包含了需要打印的各个部分。如果某个部分是变量,则将其表示为字符串`"variable"`。而`colors`仍然是一个包含每个部分颜色的列表。通过调用`print_with_color_format`函数,并传递相应的参数,即可实现带有不同颜色和变量值的打印效果。

希望这次的修改能满足您的需求!

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

凊风 发表于 2024-3-26 06:38:15

FishC 发表于 2024-3-25 13:21
非常抱歉,之前的函数确实没有考虑到`Base_Workbook`是一个变量的情况。为了体现出`Base_Workbook`是变 ...

能不能定义成def print_with_color_format(text1,variable,Text2, color1,color2,color3):

这样的句式?

FishC 发表于 2024-3-26 06:38:24

凊风 发表于 2024-03-26 06:38
能不能定义成def print_with_color_format(text1,va ...

当然可以!根据您的要求,我们可以将函数参数定义为`text1`、`variable`、`text2`、`color1`、`color2`和`color3`,并根据相应的颜色变量设置文字的颜色。以下是修改后的代码:from PySide6.QtWidgets import QApplicationfrom PySide6.QtGui import QTextCharFormat, QColorfrom PySide6.QtCore import Qtdef print_with_color_format(text1, variable, text2, color1, color2, color3):    app = QApplication()    format = QTextCharFormat()      format.setForeground(QColor(color1))    print(text1, end='')    format.clearForeground()      format.setForeground(QColor(color2))    print(variable, end='')    format.clearForeground()      format.setForeground(QColor(color3))    print(text2)    format.clearForeground()      app.quit()# 使用示例text1 = '成功《'variable = 'example.xlsx'text2 = '》并重命名为《123.xls》'color1 = 'red'color2 = 'blue'color3 = 'green'print_with_color_format(text1, variable, text2, color1, color2, color3)在此示例中,将文本分成了三个部分:`text1`、`variable`和`text2`。每个部分都有对应的颜色参数。通过调用`print_with_color_format`函数,并传递相应的参数,即可实现带有不同颜色和变量值的打印效果。希望这次的修改满足了您的需求!

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

凊风 发表于 2024-3-26 06:40:23

FishC 发表于 2024-3-26 06:38
当然可以!根据您的要求,我们可以将函数参数定义为`text1`、`variable`、`text2`、`color1`、`color2` ...

回复请注意Python格式

FishC 发表于 2024-3-26 06:40:34

凊风 发表于 2024-03-26 06:40
回复请注意Python格式

非常抱歉,下面是符合 Python 格式的修改后的代码:

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QTextCharFormat, QColor
from PySide6.QtCore import Qt

def print_with_color_format(text1, variable, text2, color1, color2, color3):
    app = QApplication()
    format = QTextCharFormat()

    format.setForeground(QColor(color1))
    print(text1, end='')
    format.clearForeground()

    format.setForeground(QColor(color2))
    print(variable, end='')
    format.clearForeground()

    format.setForeground(QColor(color3))
    print(text2)
    format.clearForeground()

    app.quit()

# 使用示例
text1 = '成功《'
variable = 'example.xlsx'
text2 = '》并重命名为《123.xls》'
color1 = 'red'
color2 = 'blue'
color3 = 'green'
print_with_color_format(text1, variable, text2, color1, color2, color3)

感谢您提醒我注意 Python 的格式规范。希望这次回复符合您的要求!

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

凊风 发表于 2024-3-26 06:49:02

FishC 发表于 2024-3-26 06:40
非常抱歉,下面是符合 Python 格式的修改后的代码:




我改写成这样:
    def print_with_color_format(self, text1, variable, text2, color1, color2, color3):

      format.setForeground(QColor(color1))
      print(text1, end='')
      format.clearForeground()

      format.setForeground(QColor(color2))
      print(variable, end='')
      format.clearForeground()

      format.setForeground(QColor(color3))
      print(text2)
      format.clearForeground()

引用self.print_with_color_format('工作簿《', Base_Workbook, '》命名为《123.xls》',
                                                 'yellow', 'blue', 'yellow')

然后报错:format.setForeground(QColor(color1))
    ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'builtin_function_or_method' object has no attribute 'setForeground'

回复请注意Python格式

FishC 发表于 2024-3-26 06:49:14

凊风 发表于 2024-03-26 06:49
我改写成这样:
    def print_with_color_format(se ...

您遇到的错误是因为代码中并没有定义变量 `format`,也缺少了对 `QTextCharFormat` 的实例化。另外,在方法内部使用 `self` 前缀需要确保该方法是类的成员方法。以下是修改后的代码示例:

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QTextCharFormat, QColor
from PySide6.QtCore import Qt

class MyClass:
    def __init__(self):
      self.app = QApplication()

    def print_with_color_format(self, text1, variable, text2, color1, color2, color3):
      format = QTextCharFormat()# 实例化 QTextCharFormat
      format.setForeground(QColor(color1))
      print(text1, end='')
      format.clearForeground()
      format.setForeground(QColor(color2))
      print(variable, end='')
      format.clearForeground()
      format.setForeground(QColor(color3))
      print(text2)
      format.clearForeground()

    def run(self):
      Base_Workbook = 'example.xlsx'
      self.print_with_color_format('工作簿《', Base_Workbook, '》命名为《123.xls》', 'yellow', 'blue', 'yellow')

      self.app.quit()

my_instance = MyClass()
my_instance.run()

请注意,在实例化 `QApplication` 后,我们将其保存在 `self.app` 中以便在方法中进行调用,并且在程序结束后调用了 `app.quit()` 来退出应用程序。

希望这次回答能满足您的要求!

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

凊风 发表于 2024-3-26 06:54:40

FishC 发表于 2024-3-26 06:49
您遇到的错误是因为代码中并没有定义变量 `format`,也缺少了对 `QTextCharFormat` 的实例化。另外,在 ...

我改写成这样:
    def print_with_color_format(self, text1, variable, text2, color1, color2, color3):
      format = QTextCharFormat()# 实例化 QTextCharFormat
      format.setForeground(QColor(color1))
      print(text1, end='')
      format.clearForeground()
      format.setForeground(QColor(color2))
      print(variable, end='')
      format.clearForeground()
      format.setForeground(QColor(color3))
      print(text2)
      format.clearForeground()

引用:self.print_with_color_format('工作簿《', Base_Workbook, '》为《123.xls》',
                                                 'yellow', 'blue', 'yellow')

这次没有报错,但是变量Base_Workbook的color2(‘blue')没成功,仍然是'yellow。'

FishC 发表于 2024-3-26 06:54:52

凊风 发表于 2024-03-26 06:54
我改写成这样:
    def print_with_color_format(se ...

非常抱歉,我之前的回答有误导。在控制台打印中,直接设置字体颜色是无法实现的,因为控制台默认的输出样式不能更改。如果您希望在GUI界面中实现文字不同颜色的效果,可以使用Qt的控件来实现。

以下是一个示例,演示如何在PySide6中使用QLabel来显示不同颜色的文字:

from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
from PySide6.QtGui import QColor

class MainWindow(QWidget):
    def __init__(self):
      super().__init__()

      # 创建布局,并将其应用于主窗口
      layout = QVBoxLayout(self)

      # 创建QLabel控件
      label1 = QLabel('工作簿《')
      label2 = QLabel(Base_Workbook)
      label3 = QLabel('》命名为《123.xls》')

      # 设置每个QLabel的字体颜色
      label1.setStyleSheet('color: yellow')
      label2.setStyleSheet('color: blue')
      label3.setStyleSheet('color: yellow')

      # 将QLabel添加到布局中
      layout.addWidget(label1)
      layout.addWidget(label2)
      layout.addWidget(label3)

if __name__ == '__main__':
    app = QApplication([])

    Base_Workbook = 'example.xlsx'

    window = MainWindow()
    window.show()

    app.exec()

注意,这个示例是基于PySide6创建的GUI应用程序,而不是在控制台中输出。通过将QLabel控件添加到布局中,并为每个QLabel设置不同的字体颜色,我们可以在GUI界面中实现所需的效果。

希望这次的回答能够满足您的要求!如果您还有其他问题,请随时提问。

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