Почему я получаю TypeError: calcFolders () отсутствует 1 обязательный позиционный аргумент: 'self'? - PullRequest
0 голосов
/ 29 января 2020

Я застрял, пытаясь понять это. Я смотрел на другие потоки stackoverflow по этому вопросу, и до сих пор не могу решить это. Почему мой код не работает в первый раз, когда я запускаю его, когда я открываю PyCharm, но он работает во второй раз?

В первый раз, когда я всегда получаю ошибку " TypeError: calcFolders () отсутствует 1 обязательный позиционный аргумент: 'self'"

Эта программа представляет собой простое приложение Tkinter, которое позволяет генерировать папки с именами с любым префиксом и инкрементным суффиксом. FOLDER_1, FOLDER_2, FOLDER_3 и т. Д. c.

from tkinter import *
from tkinter import ttk
import folderNames
import createDirs

root = Tk()
root.title("Create Folders")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

directory = StringVar()
adirectory = StringVar()
prefix = StringVar()
startN = IntVar()
endN = IntVar()
useDir = StringVar()
def calcFolders(self):
    try:
        if len(adir_entry.get())==0:
            useDir = dir_entry.get()
        else:
            useDir = "C:\\Data\\92175\\My Documents\\ARTS\\ACTION\\"+adir_entry.get()+"\\"
        a = folderNames.getf(start_entry.get(), end_entry.get(), pref_entry.get())
        createDirs.createD(useDir,a)
    except ValueError:
        pass

dir_entry = ttk.Entry(mainframe, width=14, textvariable = directory)
dir_entry.grid(column=2, row=1, sticky=(W, E))

adir_entry = ttk.Entry(mainframe, width=14, textvariable = adirectory)
adir_entry.grid(column=2, row=2, sticky=(W, E))

pref_entry = ttk.Entry(mainframe, width=14, textvariable = prefix)
pref_entry.grid(column=2, row=3, sticky=(W, E))

start_entry = ttk.Entry(mainframe, width=14, textvariable = startN)
start_entry.grid(column=2, row=4, sticky=(W, E))

end_entry = ttk.Entry(mainframe, width=14, textvariable = endN)
end_entry.grid(column=4, row=4, sticky=(W, E))

ttk.Label(mainframe, text="Directory").grid(column=1, row=1, sticky=E)
ttk.Label(mainframe, text="or: ARTS # such as \"A0380\"").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="Prefix").grid(column=1, row=3, sticky=E)
ttk.Label(mainframe, text="Start").grid(column=1, row=4, sticky=E)
ttk.Label(mainframe, text="End").grid(column=3, row=4, sticky=E)
ttk.Button(mainframe, text="CREATE", command=calcFolders).grid(column=1, row=4, sticky=N)



for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

dir_entry.focus()
root.bind('<Return>', calcFolders)

root.mainloop()

1 Ответ

2 голосов
/ 29 января 2020

calcFolders не является методом экземпляра некоторого класса, вам не нужен обычный аргумент self, который ссылается на экземпляр этого класса. Чтобы узнать больше о себе, обратитесь к этому вопросу . Просто измените ваше определение на:

def calcFolders():
    try:
        if len(adir_entry.get())==0:
            useDir = dir_entry.get()
        else:
            useDir = "C:\\Data\\92175\\My Documents\\ARTS\\ACTION\\"+adir_entry.get()+"\\"
        a = folderNames.getf(start_entry.get(), end_entry.get(), pref_entry.get())
        createDirs.createD(useDir,a)
    except ValueError:
        pass

Вы должны взглянуть на то, какие аргументы отправляются на обратный вызов command при нажатии вашей кнопки. Похоже, tkinter не ожидает, что обратный вызов примет какие-либо аргументы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...