Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Spørsmål ang henting av ID/label for objekt

6 views
Skip to first unread message

Andy

unread,
Oct 15, 2008, 5:28:08 AM10/15/08
to
Jeg forsøker å få tak i label for blockwinduer med tekst. Har brukt
klassen BlockWindow fra Rappin/Dunn-boka, koden ligger også her:
http://www.koders.com/python/fid1239DB42E078F589C6C8F962515536EC99357AB9.aspx

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

0 new messages