2017-02-11 62 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没有任何约束,因此​​需要两个参数,但没有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') 
相关问题