鱼C论坛

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

Pyqt6如何让QMessageBox按钮显示中文 ?

[复制链接]
发表于 2024-2-24 14:30:35 | 显示全部楼层 |阅读模式

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

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

x
请问Pyqt6如何让QMessageBox按钮显示中文 ?

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2024-2-24 14:30:51 | 显示全部楼层
在PyQt6中,可以通过设置消息框的按钮文本来显示中文。我们可以使用`QMessageBox.button()`方法获取对应的按钮,然后调用`QPushButton.setText()`方法设置按钮文本。

下面是一个示例代码,演示如何将QMessageBox按钮显示为中文:

  1. from PyQt6.QtWidgets import QApplication, QMessageBox

  2. app = QApplication([])

  3. # 创建一个消息框
  4. msg_box = QMessageBox()
  5. msg_box.setWindowTitle('提示')
  6. msg_box.setText('确定要退出吗?')

  7. # 获取对应的按钮
  8. yes_button = msg_box.addButton('是', QMessageBox.ButtonRole.YesRole)
  9. no_button = msg_box.addButton('否', QMessageBox.ButtonRole.NoRole)

  10. # 设置按钮文本为中文
  11. yes_button.setText('确定')
  12. no_button.setText('取消')

  13. # 显示消息框,并获取用户点击的按钮
  14. clicked_button = msg_box.exec()

  15. # 做出相应的操作
  16. if clicked_button == QMessageBox.Yes:
  17.     print('用户点击了确定按钮')
  18. else:
  19.     print('用户点击了取消按钮')

  20. app.exec()
复制代码


在这个示例中,我们首先创建了一个消息框,并设置了标题和文本。然后,我们使用`addButton()`方法获取了`Yes`和`No`按钮,并使用`setText()`方法将按钮文本设置为中文。最后,通过调用`exec()`方法显示消息框,并使用返回值`clicked_button`判断用户点击的是哪个按钮。

注意,需要确保您的PyQt6安装了适当的字体以支持中文字符的显示,否则可能会显示为方框或其他不可识别的字符。

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

使用道具 举报

 楼主| 发表于 2024-2-24 14:34:48 | 显示全部楼层
FishC 发表于 2024-2-24 14:30
在PyQt6中,可以通过设置消息框的按钮文本来显示中文。我们可以使用`QMessageBox.button()`方法获取对应的 ...

报错:
if clicked_button == QMessageBox.Yes:
                         ^^^^^^^^^^^^^^^
AttributeError: type object 'QMessageBox' has no attribute 'Yes'

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

使用道具 举报

发表于 2024-2-24 14:35:03 | 显示全部楼层
清風 发表于 2024-02-24 14:34
报错:
if clicked_button == QMessageBox.Yes:
   ...


非常抱歉,上述代码中的错误是因为我们使用了PyQt5中的属性名称。在PyQt6中,属性名称已经更改了。正确的属性名称是`QMessageBox.StandardButton`。以下是更新后的代码:

  1. from PyQt6.QtWidgets import QApplication, QMessageBox

  2. app = QApplication([])

  3. # 创建一个消息框
  4. msg_box = QMessageBox()
  5. msg_box.setWindowTitle('提示')
  6. msg_box.setText('确定要退出吗?')

  7. # 获取对应的按钮
  8. yes_button = msg_box.addButton('是', QMessageBox.ButtonRole.YesRole)
  9. no_button = msg_box.addButton('否', QMessageBox.ButtonRole.NoRole)

  10. # 设置按钮文本为中文
  11. yes_button.setText('确定')
  12. no_button.setText('取消')

  13. # 显示消息框,并获取用户点击的按钮
  14. clicked_button = msg_box.exec()

  15. # 做出相应的操作
  16. if clicked_button == QMessageBox.StandardButton.Yes:
  17.     print('用户点击了确定按钮')
  18. else:
  19.     print('用户点击了取消按钮')

  20. app.exec()
复制代码


现在,我们使用`QMessageBox.StandardButton.Yes`来检查用户点击的按钮是确定按钮。这样就可以避免`AttributeError`错误。再次抱歉给您带来的困扰,希望这次能够解决问题。

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

使用道具 举报

 楼主| 发表于 2024-2-24 14:37:54 | 显示全部楼层
FishC 发表于 2024-2-24 14:35
非常抱歉,上述代码中的错误是因为我们使用了PyQt5中的属性名称。在PyQt6中,属性名称已经更改了。正确 ...

请问可以对:msg_box.setWindowTitle('提示')
msg_box.setText('确定要退出吗?') 的字体、颜色进行设置不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-24 14:38:17 | 显示全部楼层
清風 发表于 2024-02-24 14:37
请问可以对:msg_box.setWindowTitle('提示')
msg_bo ...


可以对`msg_box.setWindowTitle()`和`msg_box.setText()`的字体、颜色进行设置。在PyQt6中,可以使用`QFont`来设置字体样式,使用`QColor`来设置颜色。以下是一个示例代码,演示如何设置消息框标题和文本的字体和颜色:from PyQt6.QtWidgets import QApplication, QMessageBox
from PyQt6.QtGui import QFont, QColor

app = QApplication([])

# 创建一个消息框
msg_box = QMessageBox()

# 设置标题的字体和颜色
title_font = QFont('Arial', 12, QFont.Weight.Bold)
title_color = QColor(255, 0, 0)  # 红色
msg_box.setWindowTitle('提示')
msg_box.setStyleSheet(f"QMessageBox QLabel{{ color: {title_color.name()}; }}")
msg_box.setWindowTitleFont(title_font)

# 设置文本的字体和颜色
text_font = QFont('Arial', 10)
text_color = QColor(0, 0, 255)  # 蓝色
msg_box.setStyleSheet(f"QMessageBox{{color: {text_color.name()};}}")
msg_box.setText('确定要退出吗?')
msg_box.setTextFont(text_font)

# 显示消息框
msg_box.exec()

app.exec()
在这个示例中,我们首先创建了一个消息框。然后,我们使用`QFont`类创建了标题和文本的字体样式,并使用`QColor`类创建了标题和文本的颜色。接下来,使用`setWindowTitleFont()`方法和`setTextFont()`方法分别将标题和文本的字体应用到消息框中。最后,使用`setStyleSheet()`方法将标题和文本的颜色应用到消息框中。需要注意的是,`setStyleSheet()`方法的参数是一个CSS样式字符串,可以使用CSS语法来设置颜色。

希望这个示例能够帮助您设置消息框标题和文本的字体和颜色。如有疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-2-24 14:44:16 | 显示全部楼层
FishC 发表于 2024-2-24 14:38
可以对`msg_box.setWindowTitle()`和`msg_box.setText()`的字体、颜色进行设置。在PyQt6中,可以使用`Q ...

报错:
msg_box.setWindowTitleFont(title_font)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'QMessageBox' object has no attribute 'setWindowTitleFont'. Did you mean: 'setWindowTitle'?


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

使用道具 举报

发表于 2024-2-24 14:44:37 | 显示全部楼层
清風 发表于 2024-02-24 14:44
报错:
msg_box.setWindowTitleFont(title_font)
   ...


很抱歉,我的回答中有错误。在`QMessageBox`类中没有名为`setWindowTitleFont()`的方法。对于消息框标题的字体样式,我们可以使用`QFont`来设置,而不是直接调用方法。

以下是经过修改的示例代码,演示如何设置消息框标题和文本的字体和颜色:

  1. from PyQt6.QtWidgets import QApplication, QMessageBox
  2. from PyQt6.QtGui import QFont, QColor

  3. app = QApplication()
  4. # 创建一个消息框
  5. msg_box = QMessageBox()

  6. # 设置标题的字体和颜色
  7. title_font = QFont('Arial', 12, QFont.Weight.Bold)
  8. title_color = QColor(255, 0, 0)  # 红色
  9. msg_box.setWindowTitle('提示')
  10. msg_box.setStyleSheet(f"QLabel#qt_msgbox_label{{ color: {title_color.name()}; }}")
  11. msg_box.setText(f'<span style="color:{title_color.name()}">{msg_box.text()}</span>')
  12. msg_box.setFont(title_font)

  13. # 设置文本的字体和颜色
  14. text_font = QFont('Arial', 10)
  15. text_color = QColor(0, 0, 255)  # 蓝色
  16. msg_box.setStyleSheet(f"QLabel#qt_msgbox_label{{color: {text_color.name()};}}")
  17. msg_box.setText(f'<span style="color:{text_color.name()}">{msg_box.text()}</span>')
  18. msg_box.setFont(text_font)

  19. # 显示消息框
  20. msg_box.exec()

  21. app.exec()
复制代码


在这个示例中,我们使用`setStyleSheet()`方法和CSS样式字符串将标题和文本的颜色应用到消息框中。同时,使用`setFont()`方法将标题和文本的字体样式应用到消息框中。

希望这个示例能够帮助您设置消息框标题和文本的字体和颜色。如有疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-2-24 16:04:29 | 显示全部楼层
FishC 发表于 2024-2-24 14:44
很抱歉,我的回答中有错误。在`QMessageBox`类中没有名为`setWindowTitleFont()`的方法。对于消息框标 ...

请问这box可以设置大小不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-24 16:04:42 | 显示全部楼层
清風 发表于 2024-02-24 16:04
请问这box可以设置大小不?


是的,`QMessageBox`可以设置大小。可以使用`setFixedSize()`方法来设置消息框的固定大小。下面是一个示例代码,演示如何设置消息框的大小:from PyQt6.QtWidgets import QApplication, QMessageBoxapp = QApplication()# 创建一个消息框msg_box = QMessageBox()msg_box.setWindowTitle('提示')msg_box.setText('这是一个消息框')# 设置消息框的固定大小msg_box.setFixedSize(300, 200)# 显示消息框msg_box.exec()app.exec()在这个示例中,我们通过调用`setFixedSize()`方法来设置消息框的宽度为300像素,高度为200像素。请根据您的需求调整宽度和高度的数值。希望这个示例对您有所帮助。如有疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-2-24 16:13:50 | 显示全部楼层
FishC 发表于 2024-2-24 16:04
是的,`QMessageBox`可以设置大小。可以使用`setFixedSize()`方法来设置消息框的固定大小。下面是一个 ...

# 设置消息框的固定大小
msg_box.setFixedSize(300, 200)   这句好像没用,BOX大小没变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-24 16:14:08 | 显示全部楼层
清風 发表于 2024-02-24 16:13
# 设置消息框的固定大小
msg_box.setFixedSize(300,  ...


非常抱歉,我之前的回答是错误的。在PyQt6中,`QMessageBox`是根据其内容自动调整大小的,无法直接设置固定大小。

如果您希望更好地控制消息框的大小,可以考虑使用自定义对话框(`QDialog`)来替代`QMessageBox`。通过自定义对话框,您可以完全自定义对话框的布局和大小。

以下是一个示例代码,展示如何创建一个自定义对话框并设置固定大小:

  1. from PyQt6.QtWidgets import QApplication, QDialog, QLabel, QVBoxLayout

  2. app = QApplication([])

  3. # 创建一个自定义对话框
  4. dialog = QDialog()
  5. dialog.setWindowTitle('自定义对话框')
  6. dialog.setFixedSize(300, 200)

  7. # 在对话框中创建布局
  8. layout = QVBoxLayout(dialog)
  9. label = QLabel('这是一个自定义对话框')
  10. layout.addWidget(label)

  11. # 显示自定义对话框
  12. dialog.exec()

  13. app.exec()
复制代码


在这个示例中,我们使用`QDialog`创建了一个自定义对话框,并使用`setFixedSize()`方法设置了对话框的固定大小。通过`QVBoxLayout`布局,我们将一个`QLabel`添加到对话框中,并设置了标签文本。

请注意,使用自定义对话框可能需要更多的布局和组件设置,以实现您所需的功能。希望这个示例能帮助到您。如有疑问,请随时提问。

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

使用道具 举报

 楼主| 发表于 2024-2-24 16:16:15 | 显示全部楼层
FishC 发表于 2024-2-24 16:14
非常抱歉,我之前的回答是错误的。在PyQt6中,`QMessageBox`是根据其内容自动调整大小的,无法直接设置 ...

那又没有“退出”和“继续”按钮了。。。。


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

使用道具 举报

发表于 2024-2-24 16:16:47 | 显示全部楼层
清風 发表于 2024-02-24 16:16
那又没有“退出”和“继续”按钮了。。。。


回复 ...


非常抱歉,我之前的回答仍然有误。在PyQt6中,`QMessageBox`确实没有提供直接设置固定大小的方法。`QMessageBox`的大小是根据其内容和按钮布局自动调整的。

如果您想要显示中文按钮并同时控制消息框的大小,可以考虑使用自定义对话框并结合`QVBoxLayout`和`QPushButton`来达到目的。以下是一个示例代码,演示如何创建一个具有中文按钮和固定大小的自定义对话框:

  1. from PyQt6.QtWidgets import QApplication, QDialog, QLabel, QVBoxLayout, QPushButton

  2. app = QApplication([])

  3. class CustomDialog(QDialog):
  4.     def __init__(self):
  5.         super().__init__()
  6.         self.setWindowTitle('自定义对话框')
  7.         self.setFixedSize(300, 200)

  8.         layout = QVBoxLayout(self)
  9.         label = QLabel('确定要退出吗?', self)
  10.         layout.addWidget(label)

  11.         buttons_layout = QHBoxLayout()
  12.         layout.addLayout(buttons_layout)

  13.         exit_button = QPushButton('退出', self)
  14.         exit_button.clicked.connect(self.exit)
  15.         buttons_layout.addWidget(exit_button)

  16.         continue_button = QPushButton('继续', self)
  17.         continue_button.clicked.connect(self.continue_)
  18.         buttons_layout.addWidget(continue_button)

  19.     def exit(self):
  20.         print('用户点击了退出按钮')
  21.         self.accept()

  22.     def continue_(self):
  23.         print('用户点击了继续按钮')
  24.         self.reject()

  25. dialog = CustomDialog()
  26. dialog.exec()

  27. app.exec()
复制代码


在这个示例中,我们首先创建了一个名为`CustomDialog`的自定义对话框类,继承自`QDialog`。在`CustomDialog`的构造函数中,我们设置了对话框的标题和固定大小。使用`QVBoxLayout`布局,我们将一个`QLabel`添加到对话框中,并设置了标签文本。

然后,我们创建了一个`QHBoxLayout`布局来容纳按钮。在布局中,我们创建了一个“退出”按钮和一个“继续”按钮,并分别将其与`exit()`和`continue_()`槽函数连接。槽函数将打印出相应的按钮信息并关闭对话框。

最后,我们创建了一个`CustomDialog`对象并执行它。

希望这个示例能帮助您实现具有中文按钮和固定大小的自定义对话框。如果还有疑问,请随时提问。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 06:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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