習慣了Delphi、c#調用系統MessageBox本地化顯示,待用PySide調用時,Qt原生提示對話框,默認以英文顯示。
如何本地化呢?
參考些資料,加以摸索,實現所需效果。並可根據此思路,設計自己所需要的MessageBox封裝。
QTextCodec.setCodecForTr(QTextCodec.codecForName("UTF-8")) box = QMessageBox(QMessageBox.Question, self.tr("提示"), self.tr("您確定要退出嗎?"), QMessageBox.NoButton, self) yr_btn = box.addButton(self.tr("是"), QMessageBox.YesRole) box.addButton(self.tr("否"), QMessageBox.NoRole) box.exec_() if box.clickedButton() == yr_btn: print 'Bye bye...' return else: print '繼續...'
效果如下圖示:
直接以.exec_()判斷,[是]按鈕返回0,尚不知如何與QMesageBox.YesRole對應。但若使用QMessageBox.AcceptRole與QMessageBox.RejectRole則可以。
下面代碼,摘自PySide自帶例子:
MESSAGE = "<p>Message boxes have a caption, a text, and up to three " \ "buttons, each with standard or custom texts.</p>" \ "<p>Click a button to close the message box. Pressing the Esc " \ "button will activate the detected escape button (if any).</p>" msgBox = QMessageBox(QMessageBox.Question, "QMessageBox.warning()", MESSAGE, QMessageBox.NoButton, self) msgBox.addButton("Save &Again", QMessageBox.AcceptRole) msgBox.addButton("&Continue", QMessageBox.RejectRole) if msgBox.exec_() == QMessageBox.AcceptRole: print "Save Again" else: print "Continue"
顯示如圖:
另一種分步方案:
box = QtGui.QMessageBox() box.setIcon(QtGui.QMessageBox.Question) box.setWindowTitle('Kaydet!') box.setText('Kaydetmek İstediğinize Emin Misiniz?') box.setStandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) buttonY = box.button(QtGui.QMessageBox.Yes) buttonY.setText('Evet') buttonN = box.button(QtGui.QMessageBox.No) buttonN.setText('Iptal') box.exec_() if box.clickedButton() == buttonY: print 'YES pressed' elif box.clickedButton() == buttonN: print 'NO pressed'
誰可知之?大抵其官方文檔可見些解釋吧。一些是點擊觸發事件,一些僅是樣式類似。
參考資料