Jeg får tak i id ved å bruke event.GetId(), men labelen er det verre med.
Det er en bug i programmet nedenfor relatert til wx.Panel trur eg, som
gjør at ikke hele resultatboksen vises, men det går an å kjøre eksemplet
og dobbeltklikke for å se hva som skjer...
Hjelp mottas med takk. Eventuelt også andre måter UTEN bruk av
BlockWindow. I utgangspunktet ønsker jeg ikke at dette vises som masse
wx.Buttons, men det er mulig det er det rette - og så evt.
endre/kamuflere knappene slik at de går i ett med bakgrunn...
Mvh Andy
import wx
from gettext import gettext as _
from blockwindow import BlockWindow
class ResultWindow(wx.Panel):
"""
This class takes a list of labels from inputList and makes a list
bwList
of Blockwindows having the labels from the inputList. The bwList is
then
distributed in a number of rows under each other (I guess a gridsizer
could to this job as well....)
"""
def __init__(self, parent, inputList, ID=-1, label="",
pos=wx.DefaultPosition, size=(600, 500)):
wx.Panel.__init__(self, parent, ID, pos, size, wx.NO_BORDER, label)
panel = wx.Panel(self)
self.SetBackgroundColour('White')
#print inputList
resultColumns = 5
number = len(inputList)
rows = number/resultColumns #Integer division returns floor of
result
if number % resultColumns != 0:
rows +=1
bwList = []
for counter in range(0, number):
bwList.append(BlockWindow(panel,
label=inputList[counter].upper()))
rowList = []
bwCounter = 0
for row in range(0, rows):
rowList.append(wx.BoxSizer(wx.HORIZONTAL))
for item in range(0, resultColumns):
if bwCounter < number:
rowList[row].Add(bwList[bwCounter], 0, wx.ALL, 2)
#Do not event over empty results
if bwList[bwCounter].label != '':
bwList[bwCounter].Bind(wx.EVT_LEAVE_WINDOW,
self.OnMouseLeaveBx)
bwList[bwCounter].Bind(wx.EVT_ENTER_WINDOW,
self.OnMouseEnterBx)
bwList[bwCounter].Bind(wx.EVT_LEFT_DCLICK,
self.OnDClickBx)
bwCounter+=1
#And then added to a wx.StaticBox
stkBox = wx.StaticBox(panel, -1, label=label)
stkBoxSizer = wx.StaticBoxSizer(stkBox, wx.VERTICAL)
for row in range(0, rows):
stkBoxSizer.Add(rowList[row],0, wx.TOP, 2)
panel.SetSizer(stkBoxSizer)
def OnMouseEnterBx(self, event):
wx.GetApp().GetTopWindow().SetStatusText(_('Doubleclick to save'))
event.Skip()
def OnMouseLeaveBx(self, event):
wx.GetApp().GetTopWindow().SetStatusText(_(''))
event.Skip()
def OnDClickBx(self, event):
""" Here I want access to the label of the BlockWindow being
doubleclicked"""
ident = event.GetId() #Check page 304 in Rappin
label = str(ident)
#I get the id for the BlockWindow - but how do I get access to
the label?
msg = wx.MessageDialog(None, label, "Title", wx.YES_NO)
returncode = msg.ShowModal()
msg.Destroy()
""" Testing routines for testing this module only"""
class Frame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent=None, id=-1)
resultList = ['one', 'two', 'three', 'four', 'five', 'six',
'seven']
self.resultBox = ResultWindow(self, resultList,
label=_('Results'), size= (400, 400))
self.statusbar = self.CreateStatusBar()
class App(wx.App):
def OnInit(self):
wx.App.__init__(self)
self.frame = Frame(-1)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def OnExit(self):
pass
if __name__ == '__main__':
app = App()
app.MainLoop()