Je suis assez nouveau sur Python, alors j'espère que vous me pardonnerez pour un tel code amateur. J'ai essayé de verser sur des exemples qui font des choses similaires, mais j'ai du mal à comprendre ce qu'ils font qui est différent. Dans les exemples, j'ai vu que chaque bouton généré avec la boucle avait une action différente, pour le mien, seul le dernier bouton de la boucle est affecté par le clic, quel que soit le bouton sur lequel j'appuie. Voici le code:Utilisation d'une boucle pour générer des boutons bitmap uniques avec des événements distincts lorsque l'on clique sur
import wx
import mmap
class pt:
Note = open('note.txt', "r+")
buf = mmap.mmap(Note.fileno(), 0)
TL = 0
readline = buf.readline
while readline():
TL += 1
class MainWindow(wx.Frame):
def __init__(self, parent, title):
w, h = wx.GetDisplaySize()
x = w * 0
y = h - bdepth
wx.Frame.__init__(self, parent, title = title, pos = (x, y), size = (200,bdepth), style = wx.STAY_ON_TOP)
self.__DoLayout()
self.Bind(wx.EVT_BUTTON, self.OnClick)
self.Show(True)
def __DoLayout(self):
self.__DoButtons(wx.Panel(self, size=(200,bdepth), pos=(0,0), name='panel'), 'Cheese')
def __DoButtons(self, panel, label):
for i, line in enumerate(pt.Note):
solid = wx.EmptyBitmap(200,50,-1)
dc = wx.MemoryDC()
dc.SelectObject(solid)
solidbrush = wx.Brush(wx.Colour(75,75,75),wx.SOLID)
solidpen = wx.Pen(wx.Colour(75,75,75),wx.SOLID)
dc.SetBrush(solidbrush)
dc.SetPen(solidpen)
dc.DrawRectangle(0, 0, 200, 50)
dc.SetTextForeground(wx.Colour(255, 255, 255))
dc.DrawText(line.rstrip(), 30, 17)
dc.SelectObject(wx.NullBitmap)
self.checked = wx.Image('buttonchecked.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap()
dc = wx.MemoryDC()
dc.SelectObject(self.checked)
dc.SetTextForeground(wx.Colour(200, 255, 0))
dc.DrawText(line.rstrip(), 30, 17)
dc.SelectObject(wx.NullBitmap)
self.b = wx.BitmapButton(panel, i + 800, solid, (0, i * 50), (solid.GetWidth(), solid.GetHeight()), style = wx.NO_BORDER, name=line.rstrip())
def OnClick(self, event):
self.b.SetBitmapDisabled(self.checked)
self.b.Enable(False)
print('cheese')
bdepth = pt.TL * 50
app = wx.App(False)
frame = MainWindow(None, "Sample editor")
app.MainLoop()enter code here
Cela fait beaucoup de sens. Merci, cela m'a aidé à comprendre comment cela fonctionne beaucoup mieux. – Tryst
@Tryst: Il serait également préférable de «lier» chaque bouton de la boucle dans votre méthode '__DoButtons()' par exemple 'self.Bind (wx.EVT_BUTTON, self.OnClick, self.b)' – volting
@volting: Merci vous pour la suggestion. Je l'avais à l'origine comme ça, mais je l'ai changé quand j'ai essayé de reproduire un exemple. Il fonctionne légèrement plus doucement avec votre suggestion. – Tryst