Gå til innhold

GTK: "Next" knapp - endre label etter trykk


Anbefalte innlegg

Hei

 

Jeg driver litt med PyGTK fortiden, og har så langt et hovedvinduet bestående av en label og to knapper.

 

Labelen inneholder tekst, som skal endres vær gang knapp1 blir trykket.

For eksempel skal labelen inneholde 'hei', når knappen ikke har blitt trykket enda. Men inneholde 'hallo' når knappen har blitt trykket en gang, og til slutt inneholde 'test' når knappen blir trykket for andre gang.

Egentlig en "next" knapp.

 

Jeg tenkte først å få next knappen min til å utløse et nytt vindu med en ny label vær gang den blir trykket. Men det må da finnes en annen måte å gjøre dette på?

 

Takker for alle svar :)

Lenke til kommentar
Videoannonse
Annonse

Nybegynner med pygtk sjøl, så ikke forvent allverdens :p

 

på knappen, setter du knappObjektet.connect('clicked', self.changemarkup)

 

og da definerer du changemarkup(self, obj) til å sette set_markup('ny tekst') på labelen.

 

Husk at metoden som kontrollerer vinduet ikke må inneholde kode som lukkern vinduet (.destroy, gtk.main_quit og sikkert flere).

 

Husk at du kan åpne knappen med

gtk.Button( stock='gtk-next')

eller noe sånt for å få en "next"-knapp

Lenke til kommentar

Takker for svar.

Men vil ikke det du nevner kun føre til at labelen får verdien 'ny tekst' vær gang next knappen trykkes, og ikke en egendefinert tekst for vær gang knappen trykkes.

 

Så jeg kom på at jeg kanskje kunne få funksjonen som kalles opp når knappen trykkes til å gi fra seg en verdi etter hvilken verdi selve labelen min allerede har.

Om labelen har en verdi lik 1 skal funksjonen gi labelen verdien 2. Og om labelen har 2, sett til 3. Dette gjentar seg da i det uendelige. Den går videre oppover etter hvor mange ganger next knappen trykkes.

 

Så om dette teoretisk skal funke lurer jeg på hvordan jeg kan sjekke om hvilken verdi en label (eller hvilken som helst gtk objekt) har.

 

test = gtk.Label("testVerdi")

 

Hvordan kan jeg nå kjøre en if for å sjekke om 'test' labelen har verdien 'testVerdi'?

 

Håper dere forstår, ble litt rotete post dette :p

Lenke til kommentar

Tusen takk for svar dabear!

Men jeg har enda ikke oppnådd det jeg ønsker.

 

Det jeg prøver å finne ut av er hvordan jeg skal lage en "veileder".

Et program som inneholder flere steg.

Når man trykker på Next knappen dukker det opp ny informasjon i vinduet.

Hvordan (sånn teoretisk) kan dette lages?

 

Er det en bedre måte å gjøre det på, enn å få next knappen til å lage et nytt vindu hele tiden?

Lenke til kommentar

 

Det jeg prøver å finne ut av er hvordan jeg skal lage en "veileder".

Et program som inneholder flere steg.

5100271[/snapback]

Tilbakeknappen bugger litt, men slik kan du fks gjøre det:

#!/usr/bin/python
# -*-encoding: iso-8859-1-*-
import os,pygtk
pygtk.require('2.0')
import gtk



class NextDialog(gtk.Window):


   def create_bbox(self, horizontal=True, title=None, spacing=0,
       layout=gtk.BUTTONBOX_SPREAD):
       frame = gtk.Frame(title)

       if horizontal:
          bbox = gtk.HButtonBox()
       else:
         bbox = gtk.VButtonBox()

       bbox.set_border_width(5)
       bbox.set_layout(layout)
       bbox.set_spacing(spacing)
       frame.add(bbox)
       
       button = gtk.Button(stock='gtk-go-back')
       button.connect('clicked', self.changeText, 'back')
       bbox.add(button)
       
       button = gtk.Button(stock='gtk-quit')
       button.connect('clicked', lambda *w: gtk.main_quit())
       bbox.add(button)
       
       button = gtk.Button(stock='gtk-go-forward')
       button.connect('clicked', self.changeText)
       bbox.add(button)
       
       return frame

   def __init__(self, parent=None):
       # Create the toplevel window
       gtk.Window.__init__(self)
       try:
           self.set_screen(parent.get_screen())
       except AttributeError:
           self.connect('destroy', lambda *w: gtk.main_quit())
       self.counter = 0
       self.texts = [
       'Dette er tekst 1',
       'Velkommen til text 2',
       'tekst 3'
       ]
       

       
       self.set_title(self.__class__.__name__)
       self.set_border_width(10)

       main_vbox = gtk.VBox()
       self.add(main_vbox)

       self.label = gtk.Label(self.texts[self.counter] + '\n')
       main_vbox.pack_start(self.label, padding=10)

       frame_horiz = gtk.Frame('Diverse tester..')

       main_vbox.pack_start(frame_horiz, padding=10)

       vbox = gtk.VBox()
       vbox.set_border_width(10)
       frame_horiz.add(vbox)

       vbox.pack_start(self.create_bbox(True,
        'Test av fram/tilbake:', 40, gtk.BUTTONBOX_SPREAD), padding=0)

       self.show_all()
       
   def changeText(self, obj, go='forward'):
       if go == 'forward':
           self.counter +=1
       elif go == 'back':
           self.counter -=1
       else:
           raise Exception        
       
       try:        
           displayText = self.texts[self.counter]
       except IndexError:
           self.counter = 0
           displayText = self.texts[self.counter]
       self.label.set_markup(displayText)
       #print displayText

def main():
   NextDialog()
   gtk.main()

if __name__ == '__main__':
   main()

Lenke til kommentar

Tusen takk for meget godt svar dabear!

Eneste minuset jeg kan komme på angående din kode er at det er kun tekst som kan vises.

Man kan vell ikke legge noe annet enn teskt i self.label? Feks en box.

En veileder innholder gjerne mer enn bare litt tekst på vært steg, og gjerne et par input bokser.

Dette lar seg ikke gjøre med en label.

 

Har selv prøvd med en box istede, men hvordan kan jeg gjøre dette da en box ikke har noe set_markup funksjon?

 

Uansett, det var lærerikt å få et så fint svar av deg, takker igjen :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...