[英]Why can't I pass this variable between methods in a class? "missing 1 required positional argument"
我試圖將小時變量從 GetHours 函數傳遞到 CSVtablemaker 函數,但它給了我以下錯誤:
Traceback (most recent call last):
File "C:\Program Files (x86)\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "\\Marge\Users\14\CharKall14\My Documents\Year 13\Computing\Programming Project\[MAIN] FILE v3.py", line 81, in <lambda>
self.Hours1Entry = tk.Button(frameHours, text="1 Hour", command= lambda: self.GetHours(1))
TypeError: GetHours() missing 1 required positional argument: 'hours'
我查看了大量頁面試圖找到答案,這可能很簡單,但我就是不明白。 對不起,我的編碼很差,我還是個新手。
這是整個課程,因為沒有它可能沒有意義:
def __init__(self, master):
frame = tk.LabelFrame(master, text="Main Menu", padx=100, pady=10)
frame.grid(row=0, column=0, padx=15, pady=15)
# Create timetable button
createTimetable = tk.Button(frame, text="Create Timetable", command=self.CreateTimetable)
createTimetable.grid(row=0, column=0, padx=4, pady=4)
# Exit program button
exitProgram = tk.Button(frame, text="Exit Program", command=self.CloseWindow)
exitProgram.grid(row=1, column=0, padx=4, pady=4)
self.hours = None
def CloseWindow(self):
# Closes the window when the close button is pressed
root.destroy()
def GetSubjects(self):
# Retrieves the subjects from what the user enters in the tableWindow
self.subject1 = self.subject1entry.get()
self.subject2 = self.subject2entry.get()
self.subject3 = self.subject3entry.get()
print(self.subject1)
print(self.subject2)
print(self.subject3)
def GetHours(self, numhours, hours):
if numhours == 1:
self.hours = 1
elif numhours == 2:
self.hours = 2
elif numhours == 3:
self.hours = 3
else:
print("unexpected error")
def CreateTimetable(self):
tableWindow = tk.Toplevel(root)
tableWindow.title('Timetable Maker Window')
tableWindow.geometry("800x500+400+200")
tableFrame = tk.LabelFrame(tableWindow, text="Enter Subjects", padx=100, pady=10)
tableFrame.grid(row=0, column=0, padx=15, pady=15)
# Subject labels
subjectlabel1 = tk.Label(tableFrame, text="Enter your first subject:")
subjectlabel2 = tk.Label(tableFrame, text="Enter your second subject:")
subjectlabel3 = tk.Label(tableFrame, text="Enter your third subject:")
# Subject entry boxes
self.subject1entry = tk.Entry(tableFrame)
self.subject2entry = tk.Entry(tableFrame)
self.subject3entry = tk.Entry(tableFrame)
# Puts subject entry boxes on screen
self.subject1entry.grid(row=0, column=1, padx=4, pady=4)
self.subject2entry.grid(row=1, column=1, padx=4, pady=4)
self.subject3entry.grid(row=2, column=1, padx=4, pady=4)
# Puts subject labels on screen
subjectlabel1.grid(row=0, column=0, padx=4, pady=4)
subjectlabel2.grid(row=1, column=0, padx=4, pady=4)
subjectlabel3.grid(row=2, column=0, padx=4, pady=4)
# Creates subject confirm button
subjectConfirm = tk.Button(tableFrame,text="Press to confirm subjects", command=self.GetSubjects)
# Puts subject confirm button on screen
subjectConfirm.grid(row=3, column=0, padx=4, pady=4)
frameHours = tk.LabelFrame(tableWindow, text="Hours tab", padx=100, pady=10)
frameHours.grid(row=1, column=0, padx=15, pady=15)
self.Hours1Entry = tk.Button(frameHours, text="1 Hour", command= lambda: self.GetHours(1))
self.Hours1Entry.grid(row=0, column=0, padx=4, pady=4)
self.Hours2Entry = tk.Button(frameHours, text="2 Hours", command= lambda: self.GetHours(2))
self.Hours2Entry.grid(row=1, column=0, padx=4, pady=4)
self.Hours3Entry = tk.Button(frameHours, text="3 Hours", command= lambda: self.GetHours(3))
self.Hours3Entry.grid(row=2, column=0, padx=4, pady=4)
def CSVtablemaker(self, hours):
hour_val = self.hours
while hour_val == 1:
print("woo hoo it works")```
您的 GetHours 方法需要 3 個參數,但 lambda 函數只提供一個。
def GetHours(self, numhours, hours)
...
command= lambda: self.GetHours(1)
輸入“1”作為參數“numhours”。 未給出其他必需參數“小時”。
——
查看您的 GetHours 函數,看起來沒有使用額外的輸入參數“小時”。 您應該能夠通過在定義方法時將其作為輸入參數刪除來解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.