wxPython の MessageDialog でボタンのテキストを変更する方法

2021年6月9日水曜日

Python wxPython

t f B! P L

今回やること

wx.MessageDialogでボタンのテキストを変更する方法を紹介します。
通常、何もしなければ、「OK」「キャンセル」などの文字が表示されます。これをオリジナルにするという意味です。

wx.MessageDialogとは

メッセージボックスに文字を表示させるために使うものです。
wxPython の MessageDialog でボタンのテキストを変更する方法
↑カスタマイズすれば↑のようにすることが可能

ソースコード

※self classの利用がいらないため、self classを使っていません。

ボタン1つ

この例では「了解!!」にしています。
import wx
app = wx.App(False)
#メッセージダイアログをつくる 親、メッセージ内容、ダイアログタイトル、アイコン
msgdialog =  wx.MessageDialog(None,"メッセージ内容","タイトル",wx.ICON_INFORMATION)
msgdialog.SetOKLabel("了解!!") #←ここ重要
msgdialog.ShowModal()
msgdialog.Destroy()

ボタン2つ

この例では「御意」と「否」にしています。
import wx
app = wx.App(False)
#メッセージダイアログをつくる 親、メッセージ内容、ダイアログタイトル、アイコン
msgdialog =  wx.MessageDialog(None,"メッセージ内容","タイトル",wx.ICON_QUESTION | wx.CANCEL)
msgdialog.SetOKCancelLabels("御意","否") #←ここ重要
msgdialog.ShowModal()
msgdialog.Destroy()
普通のMessageDialogやMessageBoxと同じように、ユーザーがクリックされたボタンによって、処理を分岐させることもできます。
import wx
app = wx.App(False)
msgdialog =  wx.MessageDialog(None,"メッセージ内容","タイトル",wx.ICON_QUESTION | wx.CANCEL)
msgdialog.SetOKCancelLabels("御意","否")
res = msgdialog.ShowModal()
if res == wx.ID_OK:
    wx.MessageBox("御意がクリックされました")
elif res == wx.ID_CANCEL:
    wx.MessageBox("否がクリックされました")
msgdialog.Destroy()

ボタン3つ

この例では「保存」「保存しない」「取消」にしています。
import wx
app = wx.App(False)
msgdialog =  wx.MessageDialog(None,"メッセージ内容","タイトル",wx.ICON_QUESTION | wx.YES_NO | wx.CANCEL)
msgdialog.SetYesNoCancelLabels("保存","保存しない","取消") #←ここ重要
res = msgdialog.ShowModal()
### ここから 処理分岐 (不要な場合は削除)
if res == wx.ID_YES:
    wx.MessageBox("保存がクリックされました")
elif res == wx.ID_NO:
    wx.MessageBox("保存しないがクリックされました")
elif res == wx.ID_CANCEL:
    wx.MessageBox("取消がクリックされました")
### ここまで 処理分岐
msgdialog.Destroy()

ボタン4つ

「思う」「少し思う」「あまり思わない」「思わない」
import wx
app = wx.App(False)
msgdialog =  wx.MessageDialog(None,"メッセージ内容","タイトル",wx.ICON_QUESTION | wx.YES_NO | wx.CANCEL | wx.HELP)
msgdialog.SetYesNoCancelLabels("思う","少し思う","あまり思わない") #←ここ重要
msgdialog.SetHelpLabel("思わない")                                 #←ここ重要
res = msgdialog.ShowModal()
### ここから 処理分岐 (不要な場合は削除)
if res == wx.ID_YES:
    wx.MessageBox("思うがクリックされました")
elif res == wx.ID_NO:
    wx.MessageBox("少し思うしないがクリックされました")
elif res == wx.ID_CANCEL:
    wx.MessageBox("あまり思わないがクリックされました")
elif res == wx.ID_HELP:
    wx.MessageBox("思わないがクリックされました")
### ここまで 処理分岐
msgdialog.Destroy()

wx.ICON_QUESTION が表示されない

残念ながらWindows Vista 以降は表示されないようです。
tkinterでは表示されますが、wxPythonでは表示されないようです。
対処法は独自のウィジェットをつくったりするしか思いつきません。

さいごに

こんなにカスタマイズができるということで、やっぱりwxPython自由度が高いなと思いました。
今回は、MessageDialogのボタンのテキストを変更するという記事でしたが、MessageDialogの基本については以下の記事が参考になると思います。
pythonでGUIツールを作る ~メッセージダイアログ~
動作環境
Windows 10
64bit
Python 3.9.1
wxPython 4.1.1a1

コメント、気軽にどうぞ

wxPythonの今スグ使えるサンプル集18個!GUI開発をマスターしよう!

今回はwxPythonのサンプルを18個紹介したいと思います。
wxPythonはウィジェットが豊富で自由度が高いので、応用するといろいろなツールが作成できます。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ