2017-02-11 6 views
0

Ich versuche eine Klassenfunktion aufzurufen, die Text in ein Konsolenfenster in Tkinter schreibt.Wie führe ich eine Klassenfunktion in einer anderen Datei aus?

Allerdings, wenn ich versuche, es zu starten. Ich erhalte den folgenden Fehler.

TypeError: write() missing 1 required positional argument: 'txt' 

Hier ist mein vollständiger Code:

main.py

from tkinter import * 
from tkinter.filedialog import askdirectory 
import os 
import nam 


class Window(Frame): 

    def __init__(self, master = None): 
     Frame.__init__(self, master) 
     self.master = master 
     self.init_window() 


    def init_window(self): 
     self.master.title("Source Data Checker") 
     self.pack(fill=BOTH, expand=1) 

     self.pathLabel = Label(text='Select the location of the source data below and press "Generate Excel"') 
     self.pathLabel.place(x=110, y=40) 

     self.selectFolderButton = Button(self, text='Select Folder', command=self.openfile) 
     self.selectFolderButton.place(x=180, y=350) 

     self.executeButton= Button(self, text='Generate Excel', command=self.run) 
     self.executeButton.config(state=DISABLED) 
     self.executeButton.place(x=330, y=350) 

     self.outputWindow = Text() 
     self.outputWindow.place(x=100, y=80) 
     self.outputWindow.config(width=50, height=15) 

    def openfile(self): #open the file 
     self.directory = askdirectory() 
     if self.directory != '': 
      nam.panels_count(self.directory) 
      self.executeButton.config(state=NORMAL) 
      print(nam.a_nam) 

    def run(self, txt): 
     pass 

    def write(self, txt): 
     self.outputWindow.insert(END, str(txt)) 
     self.update_idletasks() 

if __name__ == '__main__': 
    root = Tk() 
    root.geometry("600x400") 
    app = Window(root) 
    root.mainloop() 

nam.py

from main import * 

def panels_count(folder): 

    Window.write('test') 

Ich dachte, ich kann es instanziiert müssen. Aber wenn ich das mache, wird das Programm nicht einmal ausgeführt.

Was fehlt mir?

Antwort

6

Sie müssen die Methode für eine Instanz aufrufen. Sie rufen es in der Klasse auf, an der es keinen Wert für self gibt, an den gebunden werden soll. Daher erwartet Window.write('test')zwei Argumente, aber keinen Wert für txt.

Die Methode openfile hat Zugriff auf die Instanz über self; passieren, dass die andere Funktion in an:

def openfile(self): #open the file 
    self.directory = askdirectory() 
    if self.directory != '': 
     nam.panels_count(self, self.directory) 
     self.executeButton.config(state=NORMAL) 
     print(nam.a_nam) 

und

def panels_count(app, folder): 
    app.write('test') 
Verwandte Themen