質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
button

HTMLで用いる<button>タグです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

796閲覧

wxpythonでボタンの動作をdefから一つのコードにしたい

hiro04kon

総合スコア46

button

HTMLで用いる<button>タグです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/27 11:25

編集2021/05/28 12:34

前に質問で、ボタンの数を動的に作成するものをつくりました。
全てのボタンで、クリックしたらその時の日時を追加するとともに、クリック不可にしたいのですが、どう書いたらいいか分かりません。

python

1import wx 2import openpyxl 3import os 4import datetime 5 6tate = input("縦:= ") 7yoko = input("横:= ") 8 9class MyFrame1 ( wx.Frame ): 10 11 def __init__( self, parent ): 12 wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 867,651 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) 13 14 self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) 15 16 bSizer1 = wx.BoxSizer( wx.VERTICAL ) 17 18 bSizer1.SetMinSize( wx.Size( -1,30 ) ) 19 m_comboBox1Choices = ["aaa","bbb","ccc"] 20 self.m_comboBox1 = wx.ComboBox( self, wx.ID_ANY, u"Combo!", wx.DefaultPosition, wx.DefaultSize, m_comboBox1Choices, 0 ) 21 bSizer1.Add( self.m_comboBox1, 0, wx.ALL, 5 ) 22 23 bSizer2 = wx.BoxSizer( wx.VERTICAL ) 24 mainPanel = wx.Panel(self) 25 button = [] 26 for i in range( tate * yoko ) : 27 button.append(wx.Button(mainPanel, -1, "Button " + str(i+1) )) 28 sizer = wx.GridSizer( tate , yoko , 5, 10) 29 for j in range( tate * yoko ) : 30 button[j].Bind(wx.EVT_BUTTON, self.button_func)   #ボタンを押したときに、button_funcに渡す 31 sizer.Add(button[j],1, flag=wx.EXPAND ) 32 mainPanel.SetSizer(sizer) 33 bSizer2.Add( mainPanel, 1, wx.ALL|wx.EXPAND, 5 ) 34 35 bSizer1.Add( bSizer2, 1, wx.EXPAND, 5 ) 36 37 self.SetSizer( bSizer1 ) 38 self.Layout() 39 40 self.Centre( wx.BOTH ) 41 42 def __del__( self ): 43 pass 44 45 def button_func(event): #ここをどう書いたらいいか分かりません 46 dt_now = datetime.datetime.now() 47 gl = button.GetLabel() 48 self.label.SetLabel(gl + '\n' + dt_now.strftime('%Y年%m月%d日 %H:%M:%S') ) 49 wx.Button.Enable( False ) 50 51if __name__ == '__main__': 52 app = wx.App(False) 53 frame = MyFrame1(None) 54 frame.Show(True) 55 app.MainLoop()

def button_func(event):の書く場所が、ここでいいのか。
ラベルに文字列を追加するには。
ボタンをクリック不可にするには。

クリックしたボタンのIDを調べる方法があれば、そこからいろいろ出来る気がするのですが…
いろいろ調べたのですが、分かりませんでした。ご協力お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。event時に、「GetEventObject()」でオブジェクトを取得します。
※これは、<wx._core.Button object at 0x00000241D5B913A0>などの形式になります。
あとは、そのオブジェクトを変数として、ラベルや時間の追加、クリック不可を設定したらできました。

python

1 def button_func( self , event ): 2 obj = event.GetEventObject() 3 dt_now = datetime.datetime.now() 4 gl = obj.GetLabel() 5 obj.SetLabel(gl + '\n' + dt_now.strftime('%m月%d日 %H:%M') ) 6 obj.Disable()

投稿2021/05/29 12:03

hiro04kon

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問