NameError: globaler Name ist nicht definiert 'Erstellungsfehler, wenn er definiert wurde

Ich versuche, ein Programm zu erstellen, das eine Datei lädt (genannt lines.txt), fügt Zeilen hinzu und entfernt sie, im mit tkinter als gui. Ich kann aber nicht den add_line-Abschnitt beenden, da er immer wieder "NameError: globaler Name ist nicht definiert" erstellt wird, wenn er definiert wurde. ", listbox = Listbox(root) es in Zeile 29 als listbox = Listbox(root) , der Abschnitt, in dem es fehlschlägt def Add_Barcode(self): in def Add_Barcode(self): in def Add(self): on line 95. listbox.insert(END, term)

 from tkinter import Tk, Frame, Menu import sys, time, math from tkinter import * try: root = Tk() root.wm_title("barcode manager") root.geometry("250x150+300+300") class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Registered Barcodes.") menubar = Menu(self.parent) self.parent.config(menu=menubar) fileMenu = Menu(menubar) fileMenu.add_command(label="Add Barcode", command=self.Add_Barcode) fileMenu.add_command(label="Save", command=self.Save) fileMenu.add_command(label="Exit", command=self.onExit) menubar.add_cascade(label="File", menu=fileMenu) listbox = Listbox(root) listbox.pack(fill=BOTH, expand=1) def Popup_Menu(): menu = Menu(root, tearoff=0) menu.add_command(label="Edit", command=lambda:print("hello")) menu.add_command(label="Delete", command=lambda:print(DeleteSelection(self))) def popup(event): menu.post(event.x_root, event.y_root) listbox.bind("<Button-3>", popup) Popup_Menu() def get_lines(): lines = open('lines.txt', 'r') for line in lines: barcode, text = line.split(',') text.strip('\n') line = ': '.join(str(x) for x in ("GTIN #", barcode, text)) listbox.insert(END, line) get_lines() def DeleteSelection(self) : items = listbox.curselection() pos = 0 for i in items : idx = int(i) - pos listbox.delete( idx,idx ) pos = pos + 1 def Add_Barcode(self): import tkinter as tk nroot = Toplevel() nroot.wm_title("Add a barcode") textbox_lbl = Label(nroot, text="text") textbox_lbl.pack(side=LEFT, fill=Y) textbox = Entry(nroot, bd=2) textbox.pack(side=LEFT, fill=Y) textbox.pack(anchor=CENTER) barcode_lbl = Label(nroot, text="barcode") barcode_lbl.pack(side=LEFT, fill=Y) barcode = Entry(nroot, bd=2) barcode.pack(side=LEFT, fill=Y) barcode.pack(anchor=CENTER) def Add(self): nonlocal textbox nonlocal barcode text = textbox.get() barcode = barcode.get() nroot.destroy() a = 0 for item in barcode: a += 1 if a == 7: try: barcode = Get_Check_Digit() barcode = int(barcode) print(barcode) term = ': '.join(str(x) for x in ("GTIN #", barcode, text)) print(term) listbox.insert(END, term) except (): error = Toplevel() error.wm_title("Error") error_label = Label(error, text="please enter only numbers.") error_label.pack(side=TOP, fill=X) else: error = Toplevel() error.wm_title("Error") error_label = Label(error, text="Error") error_label.pack(side=TOP, fill=X) error_label1 = Label(error, text="please enter 7 digits") error_label1.pack(side=TOP, fill=X) time.sleep(5) error.destroy() def Get_Check_Digit(): checklist = [] number = 1 nonlocal barcode for item in barcode: checkitem = int(item) * int(number) checklist.append(checkitem) if number == 3: number = 1 elif number == 1: number = 3 checklist = sum(checklist) def roundup(x): return int(math.ceil(x / 10.0)) * 10 check_digit = roundup(checklist) check_digit -= checklist num = "".join(str(x) for x in (barcode, check_digit)) return num btn = Button(nroot, text="Add", command=lambda:Add(self)) btn.pack(side=BOTTOM, fill=Y) def Save(self): global listbox for item in listbox: print(item) def onExit(self): root.destroy() sys.exit() app = Example(root) root.mainloop() except (): pass 

  • Tornado Restful Handler Klassen
  • Holen Sie sich Original-Indizes eines sortierten Numpy Arrays
  • Benötige Charakter-für-Zeichen-Tastatureingabe, die gut mit Einfügen und ANSI-Escape-Sequenzen interagiert
  • Pandas timeseries zwischen_datetime Funktion?
  • Löschen Sie viele Elemente der Liste (Python)
  • NumPy: Hübsche Druck tabellarische Daten
  • Python StringIO-Ersatz, der mit Bytes statt Strings arbeitet?
  • Python-Pandas Ausfiltern von Nan aus einer Datenauswahl einer Spalte von Strings
  • Wie konvertiert man ein .NET-Tick zu einem Python datetime?
  • Cross-Plattform-USB-Modul für Python?
  • Wie benutzt man JQuery und Django (ajax + HttpResponse)?
  • Django: importieren Sie benutzerdefinierte Klasse in Vorlage html anstelle von Ansicht?
  • One Solution collect form web for “NameError: globaler Name ist nicht definiert 'Erstellungsfehler, wenn er definiert wurde”

    Wenn du die Listbox-Variable später in der Beispielklasse verwenden möchtest, musst du es selbst erklären, zum Beispiel:

     self.listbox = Listbox(root) 

    Und dann später verwenden wie:

     self.listbox.insert(END, term) 
    Python ist die beste Programmiersprache der Welt.