Gå til innhold

Anbefalte innlegg

Hei, er ikke alltid like lett å finne hva du er ute etter, så spørr her :)

 

 

Holder på med Tkinter.Listbox(), og prøver å skape en binding med 'Enter'.

Her er ett eksempel som fungerer:

from Tkinter import *

def enter(*ignore):
    labelText.set('Pressed!')


root = Tk()

labelText = StringVar()
labelText.set('Not pressed')
Label(root, textvariable=labelText).pack()

root.bind('<Return>', enter)
root.mainloop()

Når jeg starter programmet står det "Not pressed" på skjermen, og når jeg trykker på "Enter" tasten, forandres teksten. Easy.

 

 

Lurer på; har for øyeblikket to Listbox'er i prosjektet mitt. Den første listboksen skal inneholde kategorier som man kan velge mellom. Og når jeg trykker "Enter" på valgt element, skal jeg laste inn en liste over resultater fra valgt kategori i Listbox nr.2. Det kan jeg gjøre. Men er det mulig å få Listbox nr.2 i fokus samtidig? At jeg slipper å trykke "Tab" eller bruke musen for å sette Listbox nr.2 i fokus?

 

Takk på forhånd! :)

- Daniel

Endret av Axxxy
Lenke til kommentar
Videoannonse
Annonse

Annbefaler og bruker klasser, og "self"... Ditt eksempel (Bind-to-key) fungerer ikke på Windows XP (Py 2.7), og heller ikke på noen av mine Linux-distroer (Py 2.7).

Her er et eksempel, med noe jeg tror fungerer slik du ønsker.

from Tkinter import *

data = [None,None]
data[0] = ['1','a','alpha']
data[1] = ['2','b','beta']

class ListThing:
    def __init__(self, parent=None):
        self.labelText = StringVar()
        self.labelText.set('Not pressed')
        Label(root, textvariable=self.labelText).pack()

        lb = Listbox(root)
        lb.insert(END, 'first')
        lb.insert(END, 'second')
        lb.bind('<Return>', self.listEnter)
        lb.pack()
        self.lb = lb
         
        self.rescurrent = None;
        resbox = Listbox(root)
        resbox.pack()
        
        self.resbox = resbox

    def listEnter(self, event=None):
        wdg = event.widget
        index = int(wdg.curselection()[0])
        value = wdg.get(index)
        self.labelText.set(value)
        
        if self.rescurrent != index:
            self.resbox.delete(0, 'end')
            for item in data[index]:
                self.resbox.insert(END, item);
            self.rescurrent = index;
            
        self.resbox.focus_set()
        self.resbox.selection_set(0)

root = Tk()
ListThing(root);
root.mainloop()

Linjene verd å merke er:
self.resbox.focus_set()
self.resbox.selection_set
(0)

Endret av warpie
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...