[python] Použití Entry (TkInter widget) místo raw_inputu

petrofF petr0ff na seznam.cz
Čtvrtek Červenec 8 15:29:35 CEST 2010


Našel jsem 2 použitelné "čekací" metody: wait_window,wait_variable

Jedním ze způsobů je použít lokální event-smyčku a zachytávat pouze
události směrované do vstupního řádku.

class SyncEntry(Entry):
    def __init__(self, *a, **b):
        def getCode(event):
            self.result.set(self.get())
            entry.delete(0,END)
        Entry.__init__(self, *a, **b)
        self.bind('<Return>', getCode)
        self.result = StringVar()

    def raw_input(self):
        self.focus_set()
        self.grab_set()
        self.wait_variable(self.result)
        self.grab_release()
        return self.result.get()

Druhým ze způsobů je vytvořit modální okno s obrázkem+vstupním řádkem.
Po zadání vstupu se uzavře a funkce vrátí jeho hodnotu.

    def getPictogramText(self, pict_URL):
        def finish(event):
            finish.result = entry.get()
            if finish.result: root.destroy()
            #  ^^^^^^^^^^^^^ ignoruj prázdný vstup
        finish.result = None
        root = Toplevel()
        ...
        <ZOBRAZIT PICTOGRAM>
        ...
        Label(frame2,text=u"Opiš číslo: ").pack(side=LEFT)
        entry=Entry(frame2,  width=10)
        entry.pack(side=LEFT)
        entry.bind('<Return>', finish)
        entry.focus_set()
        root.grab_set()
        root.wait_window(root)
        return finish.result


petrofF napsal(a):
> Potřebuji v cyklu zpracovat seznam:
>
> def send():
>     for msg in msgList:           # <<< CYKL
>         processMSG(msg)
>
> def processMSG(message):
>     while 1:
>         urlForm.load()
>         showImage(urlForm.pictogramURL)
>         kod = raw_input("Opsat kod")
>         resp = urlForm.send(message,kod)
>         if urlForm.responseOK(resp):
>                break


Další informace o konferenci Python