Python TypeError:take_one()缺少1个必需的位置参数:“state”

2024-06-02 06:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

代码如下:

from tkinter import *

class Main_content:
    def take_one(self, state):
        state = state - 1
        return self.state

    def take_two(self, state):
        state = state - 2
        return self.state

    def __init__(self, master, state):
        frame = Frame(master)
        frame.pack()

        self.label_status = Label(frame, text = "Coins left: " + str(state))
        self.label_status.pack()
        self.label_status = Label(frame, text = "Player " + str(player) + " turn's")
        self.label_status.pack()

        self.pak_een = Button(frame, text="Take 1 coin", command=self.take_one)
        self.pak_een.pack()
        self.pak_twee = Button(frame, text="Take 2 coins", command=self.take_two)
        self.pak_twee.pack()

root = Tk()

player = 1
state = 21
b = Main_content(root, state)

root.mainloop()

错误是:

^{pr2}$

我是新来的,所以我不知道我做错了什么。我不知道那是什么意思。


Tags: textselfreturnmaindefstatusrootcontent
1条回答
网友
1楼 · 发布于 2024-06-02 06:32:02

有一些问题:

  1. take_onetake_two方法需要一个参数state,但您永远不会将该参数传递给它们。

  2. 您试图在这些函数中返回的self.state在任何地方都没有定义。

  3. 即使其余代码正常工作,行state = state - 1和{}也没有任何用处。state是这些函数中的局部变量,从不返回或使用。

您应该将传递给__init__state存储在self.state中,然后事件处理程序将有权访问它,并且不需要将其作为参数获取,并且不需要返回它:

class Main_content:

    def take_one(self):
        self.state -= 1

    def take_two(self):
        self.state -= 2

    def __init__(self, master, state):
        frame = Frame(master)
        frame.pack()

        self.state = state
        self.label_status = Label(frame, text = "Coins left: " + str(self.state))
        self.label_status.pack()
        self.label_status = Label(frame, text = "Player " + str(player) + " turn's")
        self.label_status.pack()

        self.pak_een = Button(frame, text="Take 1 coin", command=self.take_one)
        self.pak_een.pack()
        self.pak_twee = Button(frame, text="Take 2 coins", command=self.take_two)
        self.pak_twee.pack()

如果我遵循您的逻辑,您还需要在每次按当前值self.state时更新标签的值,我将把它留给读者作为练习:)

相关问题 更多 >