0

我有以下记事本类,我需要在文本框__thisLinkArea中插入一个字符串。

import tkinter 
import os        
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

class Notepad: 

        __root = Tk() 

        # default window width and height 
        __thisWidth = 300
        __thisHeight = 300
        __thisTextArea = Text(__root) 
        __thisLinkArea = Text(__root)
        __thisMenuBar = Menu(__root) 
        __thisFileMenu = Menu(__thisMenuBar, tearoff=0) 
        __thisEditMenu = Menu(__thisMenuBar, tearoff=0) 
        __thisHelpMenu = Menu(__thisMenuBar, tearoff=0) 
        
        # To add scrollbar 
        __thisScrollBar = Scrollbar(__thisTextArea)      
        __file = None

        def __init__(self,**kwargs): 

                # Set icon 
                try: 
                                self.__root.wm_iconbitmap("Notepad.ico") 
                except: 
                                pass

                # Set window size (the default is 300x300) 

                try: 
                        self.__thisWidth = kwargs['width'] 
                except KeyError: 
                        pass

                try: 
                        self.__thisHeight = kwargs['height'] 
                except KeyError: 
                        pass

                # Set the window text 
                self.__root.title("Untitled - Notepad") 

                # Center the window 
                screenWidth = self.__root.winfo_screenwidth() 
                screenHeight = self.__root.winfo_screenheight() 
        
                # For left-align 
                left = (screenWidth / 2) - (self.__thisWidth /2) 
                
                # For right-align 
                top = (screenHeight / 2) - (self.__thisHeight /2 ) 
                
                # For top and bottom 
                self.__root.geometry('%dx%d+%d+%d' % (self.__thisWidth, 
                                                                                        self.__thisHeight, 
                                                                                        left, top)) 

                # To make the textarea auto resizable 
                self.__root.grid_rowconfigure(0, weight=1) 
                self.__root.grid_columnconfigure(0, weight=1) 

                # Add controls (widget) 
                self.__thisTextArea.grid(sticky = N + E + S + W) 
                self.__thisLinkArea.grid(column = 0, row = 2)
                
                # To open new file 
                self.__thisFileMenu.add_command(label="New", 
                                                                                command=self.__newFile)  
                
                # To open a already existing file 
                self.__thisFileMenu.add_command(label="Open", 
                                                                                command=self.__openFile) 
                
                # To save current file 
                self.__thisFileMenu.add_command(label="Save", 
                                                                                command=self.__saveFile)         

                # To create a line in the dialog                 
                self.__thisFileMenu.add_separator()                                                                              
                self.__thisFileMenu.add_command(label="Exit", 
                                                                                command=self.__quitApplication) 
                self.__thisMenuBar.add_cascade(label="File", 
                                                                        menu=self.__thisFileMenu)        
                
                # To give a feature of cut 
                self.__thisEditMenu.add_command(label="Cut", 
                                                                                command=self.__cut)                      
        
                # to give a feature of copy      
                self.__thisEditMenu.add_command(label="Copy", 
                                                                                command=self.__copy)             
                
                # To give a feature of paste 
                self.__thisEditMenu.add_command(label="Paste", 
                                                                                command=self.__paste)            
                
                # To give a feature of editing 
                self.__thisMenuBar.add_cascade(label="Edit", 
                                                                        menu=self.__thisEditMenu)        
                
                # To create a feature of description of the notepad 
                self.__thisHelpMenu.add_command(label="About Notepad", 
                                                                                command=self.__showAbout) 
                self.__thisMenuBar.add_cascade(label="Help", 
                                                                        menu=self.__thisHelpMenu) 

                self.__root.config(menu=self.__thisMenuBar) 

                self.__thisScrollBar.pack(side=RIGHT,fill=Y)                                     
                
                # Scrollbar will adjust automatically according to the content           
                self.__thisScrollBar.config(command=self.__thisTextArea.yview)   
                self.__thisTextArea.config(yscrollcommand=self.__thisScrollBar.set) 
        
                
        def __quitApplication(self): 
                self.__root.destroy() 
                # exit() 

        def __showAbout(self): 
                showinfo("Notepad","Mrinal Verma") 

        def __openFile(self): 
                
                self.__file = askopenfilename(defaultextension=".txt", 
                                                                        filetypes=[("All Files","*.*"), 
                                                                                ("Text Documents","*.txt")]) 

                if self.__file == "": 
                        
                        # no file to open 
                        self.__file = None
                else: 
                        
                        # Try to open the file 
                        # set the window title 
                        self.__root.title(os.path.basename(self.__file) + " - Notepad") 
                        self.__thisTextArea.delete(1.0,END) 

                        file = open(self.__file,"r") 

                        self.__thisTextArea.insert(1.0,file.read()) 

                        file.close() 

                
        def __newFile(self): 
                self.__root.title("Untitled - Notepad") 
                self.__file = None
                self.__thisTextArea.delete(1.0,END)
                

        def __saveFile(self): 

                if self.__file == None: 
                        # Save as new file 
                        self.__file = asksaveasfilename(initilfile='Untitled.txt', 
                                                                                        defaultextension=".txt", 
                                                                                        filetypes=[("All Files","*.*"), 
                                                                                                ("Text Documents","*.txt")]) 

                        if self.__file == "": 
                                self.__file = None
                        else: 
                                
                                # Try to save the file 
                                file = open(self.__file,"w") 
                                file.write(self.__thisTextArea.get(1.0,END)) 
                                file.close() 
                                
                                # Change the window title 
                                self.__root.title(os.path.basename(self.__file) + " - Notepad") 
                                
                        
                else: 
                        file = open(self.__file,"w") 
                        file.write(self.__thisTextArea.get(1.0,END)) 
                        file.close() 

        def __cut(self): 
                self.__thisTextArea.event_generate("<<Cut>>") 

        def __copy(self): 
                self.__thisTextArea.event_generate("<<Copy>>") 

        def __paste(self): 
                self.__thisTextArea.event_generate("<<Paste>>") 

        def append(self,a):
                self.__thisLinkArea.insert('1.0',a)



        def run(self): 

                # Run main application 
                self.__root.mainloop() 

但它没有插入任何东西,当我退出终端时会给出以下输出:

python3 ~/pp/ecoi.py
Traceback (most recent call last):
  File "/home/josquin/pp/ecoi.py", line 13, in <module>
    notepad.append('ciao')
  File "/home/josquin/pp/editortry1.py", line 195, in append
    self.__thisLinkArea.insert('1.0',a)
  File "/usr/lib/python3.8/tkinter/__init__.py", line 3738, in insert
    self.tk.call((self._w, 'insert', index, chars) + args)
_tkinter.TclError: invalid command name ".!text2"

如您所见,在这种特定情况下,我正在导入 Notepad 并从位于同一路径中的另一个脚本 ecoi.py 调用 Notepad.append('string') 。

4

0 回答 0