本文主要是介绍Pyside6:QDialog按钮变为中文,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如果在Qt Designer中创建了一个Qdialog,自带按钮的类型,那么在Designer中显示是中文,但在运行时将变成英文。
如果程序不需要进行国际化,只在国内使用,那么进行中文化的操作还是有必要的,其实方式很简单,按钮组是基于QDialogButtonBox实现的,只要更改QDialogButtonBox的文本内容即可。
# 关键代码
self.ui.buttonBox.button(QDialogButtonBox.Save).setText('保存')
self.ui.buttonBox.button(QDialogButtonBox.Cancel).setText('取消')
通过修改对应的按钮枚举,即可修改对应文本。
按钮枚举:
- QDialogButtonBox.Ok:确定
- QDialogButtonBox.Save:保存
- QDialogButtonBox.SaveAll:全部保存
- QDialogButtonBox.Open:打开
- QDialogButtonBox.Yes:是
- QDialogButtonBox.YesToAll:全是
- QDialogButtonBox.No:否
- QDialogButtonBox.NoToAll:全否
- QDialogButtonBox.Abort:中止
- QDialogButtonBox.Retry:重试
- QDialogButtonBox.Ignore:忽略
- QDialogButtonBox.Close:关闭
- QDialogButtonBox.Cancel:取消
- QDialogButtonBox.Discard:丢弃
- QDialogButtonBox.Help:帮助
- QDialogButtonBox.Apply:应用
- QDialogButtonBox.Reset:重置
- QDialogButtonBox.RestoreDefaults:恢复默认
如果每次添加一个QDialog每次都得添加这些代码就很麻烦,那本文就提供几个简单的解决方案来统一更换中文。
一、派生基础QDialog
派生一个最基础的QDialog,然后在这个QDialog中统一修改QDialogButtonBox的文本即可,那么每次要使用相应的QDialog继承派生类即可。
class BaseCNDialog(QDialog):def exec(self):button_box = self.findChild(QDialogButtonBox)if button_box:if button_box.button(QDialogButtonBox.Save):button_box.button(QDialogButtonBox.Save).setText('保存')if button_box.button(QDialogButtonBox.Cancel):button_box.button(QDialogButtonBox.Cancel).setText('取消')if button_box.button(QDialogButtonBox.Open):button_box.button(QDialogButtonBox.Open).setText('打开')return super().exec()
部分代码说明:
- 由于Dialog展示时需要调用exec(),因此把按钮的文本替换放在exec()中比较合适
- 需要使用findChild来判断Qdialog是否使用到了QDialogButtonBox
- 需要判断button_box.button(QDialogButtonBox.Save)为空来确定相应的按钮是否存在,存在才进行文本替换
调用时直接继承基类即可:
class TestDialog(BaseCNDialog):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.ui = Ui_Dialog()self.ui.setupUi(self)
二、派生基础QDialogButtonBox(不推荐)
第二种方式就简单粗暴了,既然调用的是QDialogButtonBox,那么直接派生它就比较直接,但不方便的地方在于如果使用了Qt Designer,那么需要对Designer中的QDialogButtonBox进行提升。
class BaseDialogButtonBox(QDialogButtonBox):def setStandardButtons(self, buttons):super().setStandardButtons(buttons)if self.button(QDialogButtonBox.Save):self.button(QDialogButtonBox.Save).setText('保存')if self.button(QDialogButtonBox.Cancel):self.button(QDialogButtonBox.Cancel).setText('取消')if self.button(QDialogButtonBox.Open):self.button(QDialogButtonBox.Open).setText('打开')
记住,如果在Designer中需要提升,否则无法使用:
三、总结
除了以上两种常用方式,其实还有不少方式,比如混入、装饰器等等,不过还是推荐派生基础QDialog最方便。
这篇关于Pyside6:QDialog按钮变为中文的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!