簡體   English   中英

為什么我不能在類中的方法之間傳遞這個變量? “缺少 1 個必需的位置參數”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM