2017-02-11 4 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, связанного с ним, поэтому Window.write('test') ожидает два аргумента, но не имеет значения для 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') 
Смежные вопросы