[python] Použití Entry (TkInter widget) místo raw_inputu
petrofF
petr0ff na seznam.cz
Pátek Březen 31 13:31:05 CEST 2017
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