Seite 1 von 1

tkinter.TclError

Verfasst: Donnerstag 19. Juli 2012, 14:14
von Nobuddy
Hallo zusammen,
habe von hier http://www.python-kurs.eu/tkinter_entry_widgets.php mir diesen Code kopiert:

Code: Alles auswählen

#!/usr/bin/python3

from tkinter import *
fields = 'Last Name', 'First Name', 'Job', 'Country'

def fetch(entries):
   for entry in entries:
      field = entry[0]
      text  = entry[1].get()
      print('%s: "%s"' % (field, text)) 

def makeform(root, fields):
   entries = []
   for field in fields:
      row = Frame(root)
      lab = Label(row, width=15, text=field, anchor='w')
      ent = Entry(row)
      row.pack(side=TOP, fill=X, padx=5, pady=5)
      lab.pack(side=LEFT)
      ent.pack(side=RIGHT, expand=YES, fill=X)
      entries.append((field, ent))
   return entries

if __name__ == '__main__':
   root = Tk()
   ents = makeform(root, fields)
   root.bind('', (lambda event, e=ents: fetch(e)))   
   b1 = Button(root, text='Show',
          command=(lambda e=ents: fetch(e)))
   b1.pack(side=LEFT, padx=5, pady=5)
   b2 = Button(root, text='Quit', command=root.quit)
   b2.pack(side=LEFT, padx=5, pady=5)
   root.mainloop()
Beim Aufruf in der Konsole, erhalte ich aber leider folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "a.py", line 30, in <module>
    root.bind('', (lambda event, e=ents: fetch(e)))   
  File "/usr/lib/python3.2/tkinter/__init__.py", line 980, in bind
    return self._bind(('bind', self._w), sequence, func, add)
  File "/usr/lib/python3.2/tkinter/__init__.py", line 935, in _bind
    self.tk.call(what + (sequence, cmd))
_tkinter.TclError: no events specified in binding
Ich stehe da ein bisschen auf dem Schlauch und hoffe Ihr könnt mir dabei helfen!

Grüße Nobuddy

Re: tkinter.TclError

Verfasst: Donnerstag 19. Juli 2012, 14:49
von BlackJack
@Nobuddy: Lass am besten die Finger von dem Kurs. Der ist nicht gut und ich hoffe auch nicht ernst gemeint. Der Betreiber hat einen ganzen Zoo von Webseiten zu verschiedenen Themen die alle untereinander verlinkt sind und ist ein SEO-Mensch.

Edit: Die Kursseiten haben nichts mit SEO zu tun, sondern sind ein Informationangebot das sich an menschliche Leser richtet und nicht an Suchmaschinen.

Re: tkinter.TclError

Verfasst: Donnerstag 19. Juli 2012, 15:13
von Nobuddy
@BlackJack, Danke für die Info, dann lasse ich da meine Finger davon!

Re: tkinter.TclError

Verfasst: Donnerstag 19. Juli 2012, 18:00
von wuf
Hi Nobuddy

Das Skript darfst du trotzdem zum laufen bringen. Die Fehlermeldung besagt das die Anweisung in Zeile 30 keinen gültigen Event-Typen aufweist. Betrifft ziemlich sicher die folgende Anweisung:

Code: Alles auswählen

root.bind('', (lambda event, e=ents: fetch(e)))
Abgeändert auf:

Code: Alles auswählen

root.bind('<Control-Shift-KeyPress-S>', (lambda event, e=ents: fetch(e)))
sollte das Skript laufen. Die Anweisung bewirkt beim drücken der Tasten Cntr->Shift und s das gleiche wie die Schaltfläche 'Show'

Gruß wuf :wink:

Re: tkinter.TclError

Verfasst: Freitag 20. Juli 2012, 13:41
von Nobuddy
Hallo wuf,
Danke für Deine Bemühung, das war der richtige Tipp! :wink:

Habe noch eine Zeile zusätzlich für den Fensternamen spendiert:

Code: Alles auswählen

#!/usr/bin/python3

from tkinter import *
fields = 'Last Name', 'First Name', 'Job', 'Country'

def fetch(entries):
   for entry in entries:
      field = entry[0]
      text  = entry[1].get()
      print('%s: "%s"' % (field, text))

def makeform(root, fields):
   entries = []
   for field in fields:
      row = Frame(root)
      lab = Label(row, width=15, text=field, anchor='w')
      ent = Entry(row)
      row.pack(side=TOP, fill=X, padx=5, pady=5)
      lab.pack(side=LEFT)
      ent.pack(side=RIGHT, expand=YES, fill=X)
      entries.append((field, ent))
   return entries

if __name__ == '__main__':
   root = Tk(className=" Fensternamen")
   ents = makeform(root, fields)
   root.bind('<Control-Shift-KeyPress-S>', (lambda event, e=ents: fetch(e)))  
   b1 = Button(root, text='Show',
          command=(lambda e=ents: fetch(e)))
   b1.pack(side=LEFT, padx=5, pady=5)
   b2 = Button(root, text='Quit', command=root.quit)
   b2.pack(side=LEFT, padx=5, pady=5)
   root.mainloop()