我有点像一个python noob,我试图为我的学校制作一个简单的文本编辑器,但保存,剪切,粘贴和复制不起作用。它叫做PyWriter,即时通讯使用Tkinter。很抱歉没有添加代码评论。这是我的代码:
import Tkinter
from Tkinter import *
from ScrolledText import *
import tkFileDialog
import tkMessageBox
def __init__(self):
self.text = textPad()
self.text.pack()
root = Tkinter.Tk(className=" PyWriter")
textPad = ScrolledText(root, width=100, height=80)
def open_command():
file = tkFileDialog.askopenfile(parent=root,mode='rb',title='Open')
if file != None:
contents = file.read()
textPad.insert('1.0',contents)
file.close()
def save_command(self):
file = tkFileDialog.asksaveasfile(parent=root,mode='w',title='Save')
if file != None:
data = self.textPad.get('1.0', END+'-1c')
file.write(data)
file.close()
def exit_command():
root.destroy()
def copy_command(self, event=None):
self.clipboard_clear()
text = self.get("sel.first", "sel.last")
self.clipboard_append(text)
def cut_command(self, event=None):
self.copy()
self.delete("sel.first", "sel.last")
def paste_command(self, event=None):
text = self.selection_get(selection='CLIPBOARD')
self.insert('insert', text)
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Open...", command=open_command)
filemenu.add_command(label="Save...", command=save_command)
filemenu.add_separator()
filemenu.add_command(label="Copy", command=copy_command)
filemenu.add_command(label="Cut", command=cut_command)
filemenu.add_command(label="Paste", command=paste_command)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=exit_command)
textPad.pack()
root.mainloop()
答案 0 :(得分:1)
Tkinter GUI经常在不使用类的情况下进行编码,但我建议使用它们 您可能会因为切割和粘贴而混合使用这两种方法 为了让您了解代码中的错误,我将根据两种不同的方法为您提供以下示例。我只修复了复制/粘贴方法,其余的对你有用。
没有类(我不认为这个好代码):
import Tkinter as tk
from ScrolledText import ScrolledText
def copy_command():
root.clipboard_clear()
text = textPad.get("sel.first", "sel.last")
root.clipboard_append(text)
def paste_command():
text = root.selection_get(selection='CLIPBOARD')
textPad.insert('insert', text)
root = tk.Tk(className=" PyWriter")
textPad = ScrolledText(root, width=100, height=80)
menu = tk.Menu(root)
root.config(menu=menu)
filemenu = tk.Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Copy", command=copy_command)
filemenu.add_command(label="Paste", command=paste_command)
textPad.pack()
root.mainloop()
和课程:
import Tkinter as tk
from ScrolledText import ScrolledText
class TkApp(tk.Tk):
def __init__(self, className=" PyWriter"):
tk.Tk.__init__(self, className=className)
self.textPad = ScrolledText(self, width=100, height=80)
self.textPad.pack()
menu = tk.Menu(self)
self.config(menu=menu)
filemenu = tk.Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Copy", command=self.copy_command)
filemenu.add_command(label="Paste", command=self.paste_command)
def copy_command(self):
self.clipboard_clear()
text = self.textPad.get("sel.first", "sel.last")
self.clipboard_append(text)
def paste_command(self):
text = self.selection_get(selection='CLIPBOARD')
self.textPad.insert('insert', text)
if __name__ == '__main__':
app = TkApp()
app.mainloop()
答案 1 :(得分:0)
正是由于这个(和其他类似的错误):
def save_command(self):
您的函数接受一个参数,但该按钮不会向其传递参数,因此会抛出错误。
我的猜测是,你错误地从其他地方复制了这段代码。它具有类的所有标记,但您没有class
语句。你有一个__init__
函数只会在你实例化一个类时被调用,而你的函数只有self
作为它们的唯一参数,这通常就是你对象的方法所做的。
我的建议是仔细查看您复制此代码位的位置,您会发现可能在__init__
函数之前,您会看到类似class Something():