Как получить какие-нибудь данные о той кнопке, которая вызывает событие? (динамические кнопки)
Есть класс панели, в которой создается столько кнопок, сколько я попрошу:
class LevelsPanel(wx.Panel):
def __init__(self, parent, quantity_btn):
wx.Panel.__init__(self, parent)
self.btn_levels = list()
for btn_num in range(0, quantity_btn):
pos = (70 + btn_num * 140, 70)
btn = wx.Button(self, id=btn_num, label=str(btn_num+1), pos=pos, size=(70, 70))
self.Bind(wx.EVT_BUTTON, self.on_play, btn, id=btn_num+1)
self.btn_levels.append(btn)
Как мне в методе on_play() узнать, какая именно кнопка нажата?
def on_play(self, event):
print("нажата кнопка " + "такая-то")
https://github.com/ShulV/Ray-Casting-Python для наглядности можете посмотреть на этот момент в проекте. Скорее всего от него неприятно пахнет, я только учусь :)
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import wx
import random
class Mywin(wx.Frame):
def __init__(self, parent, title, quantity_btn):
super(Mywin, self).__init__(parent, title = title, size = (200,200))
self.listColor = ['#FF0000', '#00FF00', '#7777FF',
'#FFFF00', '#00FFFF', '#FF00FF']
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
for btn_num in range(0, quantity_btn):
btn = wx.Button(panel, -1, f"{btn_num}", size=(35, 25))
vbox.Add(btn, 0, wx.ALIGN_CENTER)
btn.Bind(wx.EVT_BUTTON, self.OnClicked)
btn.SetBackgroundColour(random.choice(self.listColor))
panel.SetSizer(vbox)
self.Centre()
self.Show()
self.Fit()
def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print(f"нажата кнопка => `{btn}`")
if __name__ == "__main__":
app = wx.App()
Mywin(None, 'Title', 6)
app.MainLoop()
