Как получить какие-нибудь данные о той кнопке, которая вызывает событие? (динамические кнопки)

Есть класс панели, в которой создается столько кнопок, сколько я попрошу:

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()

введите сюда описание изображения

→ Ссылка