wxpython - simpel output via button

Her kan du få hjælp og stille spørgsmål til andre programmeringssprog!
Besvar
Josefine
Geni
Geni
Indlæg: 308
Tilmeldt: 9. dec 2011, 16:46

wxpython - simpel output via button

Indlæg af Josefine » 8. jul 2014, 16:00

Hej. Sidder med nogen wxpython (Python 2.7,7), tror det er lidt old school men haha, anyways, jeg er stødt på lidt af et problem. Jeg vil gerne printe noget tekst ud i mit frame (ikke i shell!) når jeg trykker på en knap... min kode ser ud sådan her:

Kode: Vælg alt

import x
class josefine (wx.Frame):
     def __init__(self,parent,id):
          wx.Frame.__init__(self, parent, id, 'Frame', size=(500,400))
          panel = wx.Panel(self)
          button1=wx.Button(panel,label="print ud", pos=(100,30), size=40,30))
          self.Bind(wx.EVT_BUTTON, self.output, button1)

     def output(self,event):
          *print tekst ud her*

if __name__=='__main__':
     app=wx.App(False)
     frame=josefine(parent=None,id=-1)
     frame.Show()
     app.MainLoop()
Problemet er så, at når jeg bruger wx.StaticText('some text',(10,10)), så kræver den nogle argumenter, og jeg aner ikke, hvad jeg skal sætte dem til for at det kører. I starten havde jeg (panel, -1 ....) men efter en del fumlen rundt fandt jeg så ud af, at panel ikke er defineret, fordi den nu er inde i en funktion... og funktionen er jo uden for __init__-funktionen. Jeg får error: panel not defined...
Jeg prøvede så at rykke funktionen ind i __init__-funktionen men uden held. Så tænkte jeg at lave en variabel uden for funktionen med teksten og så i funktionen referere til dén variabel, men ... så printer den jo teksten ud inden man trykker på knappen, hvilket den ikke skal gøre.

Jeg har testet denne kode med et loop inde i output-funktionen, og det virker helt fint og printer ud i shell, men jeg ved ikke, hvad jeg skal gøre for at få tingene til at dukke op i mit frame. Nogen ideer?

Josefine
Geni
Geni
Indlæg: 308
Tilmeldt: 9. dec 2011, 16:46

Re: wxpython - simpel output via button

Indlæg af Josefine » 15. jul 2014, 16:27

Jeg fandt ud af det! panel = wx.Panel(self) skal bare gøres global, og det gør man ved at skrive self.panel = wx.Panel(self) i stedet for og ellers erstatte det alle andre steder, der er refereret til panel i stedet for self.panel :)
Så er spørgsmålet, hvordan man får værdien fra en knap printet ud, hmm...

cristian
Moderator
Moderator
Indlæg: 882
Tilmeldt: 26. sep 2011, 21:31
Kontakt:

Re: wxpython - simpel output via button

Indlæg af cristian » 15. jul 2014, 16:42

Det et godt spørgsmål :)

Desværre er jeg ikke Python udvikler, så kan ikke hjælpe.

Josefine
Geni
Geni
Indlæg: 308
Tilmeldt: 9. dec 2011, 16:46

Re: wxpython - simpel output via button

Indlæg af Josefine » 15. jul 2014, 16:53

Nevermind, jeg fandt ud af det :D (endelig!) I def output(self, evt):

Kode: Vælg alt

label = evt.GetEventObject().GetLabel()
string = wx.StaticText(self.panel,-1, "Du har trykket på knap: " + label,(10,150), (260,-1), wx.ALIGN_CENTER)
Bær over med eventuelle tastefejl, programmerer fra én computer og skriver på fra en anden :)

Josefine
Geni
Geni
Indlæg: 308
Tilmeldt: 9. dec 2011, 16:46

Re: wxpython - simpel output via button

Indlæg af Josefine » 15. jul 2014, 16:54

Det skal dog lige haves i overvejelserne, at dette output bliver string-værdi. Har desværre ingen anelse om, hvordan man får numerisk værdi :/

Besvar