2017-02-11 14 views
0

Tkinterのコンソールウィンドウにテキストを書き込むクラス関数を呼び出そうとしています。別のファイルでクラス関数を実行するにはどうすればよいですか?

しかし、私はそれを実行しようとします。私は以下のエラーが発生しています。ここで

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

私の完全なコードです:私は、私はそれをインスタンス化する必要があるかもしれないことを考えていた

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') 

。しかし、私がそれをすると、プログラムは実行されません。

私には何が欠けていますか?

答えて

6

インスタンスでメソッドを呼び出す必要があります。クラス上で呼び出すと、selfがバインドされることはありません。したがって、​​はの2つの引数を想定していますが、txtの値はありません。

openfileメソッドは、selfでインスタンスにアクセスできます。他の関数にそれを渡す:

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) 

def panels_count(app, folder): 
    app.write('test') 
関連する問題