我有一个代码来从文本框中获取输入,然后将输入写入文本文件: 请帮我纠正我的错误和我的代码来自以下
我的代码:
import tkinter as tki
class App(object):
def __init__(self,root):
self.root = root
# create a Frame for the Text and Scrollbar
txt_frm = tki.Frame(self.root, width=600, height=400)
txt_frm.pack(fill="both", expand=True)
# ensure a consistent GUI size
txt_frm.grid_propagate(False)
self.txt1 = tki.Text(txt_frm, borderwidth=3, relief="sunken", height=4,width=55)
self.txt1.config(font=("consolas", 12), undo=True, wrap='word')
self.txt1.grid(row=0, column=1, sticky="nsew", padx=2, pady=2)
button = tki.Button(self,text="Click", command = self.retrieve_input)
button.grid(column=2,row=0)
def retrieve_input(self):
input = self.txt1.get("0.0",'END-1c')
with open('text.txt','w') as f:
f.write(input)
f.close()
root = tki.Tk()
app = App(root)
root.mainloop()
错误:
File "C:/Python34/testtext.py", line 21, in <module>
app = App(root)
File "C:/Python34/testtext.py", line 13, in __init__
button = tki.Button(self,text="Click", command = self.retrieve_input)
File "C:\Python34\lib\tkinter\__init__.py", line 2156, in __init__
Widget.__init__(self, master, 'button', cnf, kw)
File "C:\Python34\lib\tkinter\__init__.py", line 2079, in __init__
BaseWidget._setup(self, master, cnf)
File "C:\Python34\lib\tkinter\__init__.py", line 2057, in _setup
self.tk = master.tk
AttributeError: 'App' object has no attribute 'tk'
答案 0 :(得分:2)
您的按钮小部件的父级为self,这是一个非tk对象。
button = tki.Button(self...
如果您尝试将self.root设为父级,则它将无法正常工作,因为您已将“txt_frm”打包到其上。 (并且您不能在同一父母下混合打包和网格。
您所要做的就是将父级更改为txt_frm
button = tki.Button(txt_frm,text="Click", command = self.retrieve_input)
button.grid(column=2,row=0)
我还建议将tkinter导入为tk,它更标准。
看看回溯错误,如果代码非常线性且简单,那就应该是你需要的。
如果你想使用类实例self作为实例,你必须在tkinter类下初始化类,下面self现在是一个tkinter框架。
class App(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
def makeButton(self):
widget = tk.Button(self)