几天我一直在试图解决这个问题,我没有任何成功。大部分代码都给了我,我应该让它更“面向对象”。Python:全球名称我没有定义(错误?)错误
在我上课之前它工作得很好。
到目前为止,我给出的错误是:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
return self.func(*args)
File "C:\Users\oliver.andersson\Documents\pythonprog\kap21ovn1.py", line 45, in getfile
filnamn = namn.get()
NameError: global name 'namn' is not defined
,但我敢肯定,这不是唯一的东西是错误的。
任何帮助将不胜感激!
这里是我的代码:
import tkinter as tk
from tkinter.scrolledtext import *
class App:
def __init__(self, root):
root.title('Min texteditor')
frame = tk.Frame(root, bg = '#f0f0f0')
frame.grid()
tk.Label(frame, text = 'Editera textfiler/Pythonfiler',
font = ('Arial', 16, 'normal')).grid(
row = 0, column = 0, columnspan = 40)
tk.Label(frame, text = 'Fil: ', font = ('Arial', 12, 'normal')).grid(
row = 1, column = 0, sticky = tk.E)
namn = tk.Entry(frame, width = 40)
namn.grid(row = 1, column = 1, columnspan = 5, sticky = tk.W)
openbutton = tk.Button(frame, text = 'Öppna', command = self.getfile)
openbutton.grid(row = 2, column = 1, sticky = tk.W)
saveButton = tk.Button(frame, text = 'Spara', command = self.savefile)
saveButton.grid(row = 2, column = 3, sticky = tk.W)
saveasButton = tk.Button(frame, text = 'Spara som...', command = self.saveas)
saveasButton.grid(row = 2, column = 4, sticky = tk.W)
exitButton = tk.Button(frame, text = 'Avsluta', command = root.destroy)
exitButton.grid(row = 2, column = 6, sticky = tk.E)
tk.Label(frame, text = ' ',
font = ('Arial', 14, 'normal')).grid(row = 3, column = 0)
textruta = ScrolledText(frame, heigh = 30, width = 80)
textruta.grid(row = 4, column = 0, columnspan = 40)
def getfile(self):
filnamn = namn.get()
if not filnamn:
filnamn = tk.filedialog.askopenfilename(filetypes = (('Pythonfiler',
'*.py'),))
if filnamn:
try:
fil = open(filnamn, 'r', encoding = 'utf-8')
rader = fil.read()
except:
tk.messagebox.showerror('Filfel', 'Kunde inte öppna fil')
else:
namn.delete(0, tk.END)
namn.insert(0, filnamn)
textruta.delete(1.0,tk.END)
textruta.insert(1.0, rader)
finally:
try:
fil.close()
except:
pass
def savefile(self):
rader = textruta.get(1.0, tk.END)
filnamn = namn.get()
if filnamn:
try:
fil = open(filnamn, 'w', encoding = 'utf-8')
fil.write(rader)
except:
tk.messagebox.showerror('Filfel', 'Kunde inte spara fil')
else:
fil.close()
def saveas(self):
filnamn = tk.filedialog.asksaveasfile(
filetypes = (('Alla filer', '*.*'),))
if filnamn:
namn.delete(0, tk.END)
namn.insert(0, filnamn)
savefile()
master = tk.Tk()
a = App(master)
master.mainloop()
这个问题似乎是无关紧要的,因为OP要求我们调试他们的代码 – Kimvais