如何绑定龟中的按钮?

时间:2016-03-14 01:31:33

标签: python turtle-graphics

注意:我已经尝试从https://docs.python.org/3/和其他堆栈溢出问题中找到解决方案,但我还没有找到它。

我要找的很简单。在使用这样的代码时:

import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u(), "Up")
s.listen()

它只是运行代码u所以首先:为什么它不等到我按下" Up"?第二,我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您需要在onkey回调函数之外的listenu调用

像这样:

import turtle

def u():
    t.forward(50)

s = turtle.Screen()
t = turtle.Turtle()

s.onkey(u, "Up")
s.listen()

turtle.done()

请注意,在s.onkey(u, "Up")我只有u 而非 u()。前者将函数本身传递给.onkey,因此它知道在"Up"键事件发生时要调用的函数。后者只是将调用u的结果(None,因为u没有return语句)传递给.onkey

此外,您的代码省略了turtle.done()来电。这告诉乌龟进入事件循环,所以它会监听事件并回应它们。没有它,脚本会打开一个乌龟窗口,然后立即关闭它。

顺便说一句,您发布的代码有IndentationError;在Python中,正确的缩进至关重要

答案 1 :(得分:-1)

在括号后面调用该函数。只需将它们传递给函数本身而不是它返回的内容:

template <class T>
class LinkedList
{
private:
struct ListNode
{
  T data ;
  struct ListNode * next;
};

ListNode *head;

public:
LinkedList() { head = nullptr; }
 ~LinkedList();

// Linked list operations
void insertNode(T);
bool deleteNode(T);
void displayList() const;
};

// insertNode: add a node in list order
template <class T>
void LinkedList<T>::insertNode(T newValue)
{
ListNode *newNode;
ListNode *pCur;
ListNode *pPre = NULL;

newNode = new ListNode;
newNode->data = newValue;
newNode->next = nullptr;

if (head == nullptr)
{
  head = newNode;
}
else
{
    pCur = head;
    pPre = nullptr;
    while (pCur != nullptr && pCur->data < newValue)
    {
        pPre = pCur;
        pCur = pCur->next;
    }

    if (pPre == nullptr)
    {
        head = newNode;
        newNode->next = pCur;
    }
    else
    {
        pPre->next = newNode;
        newNode->next = pCur;
    }
}
}

在Python中,函数就像其他所有东西一样。您不需要使用括号来使用它们。您可以执行import turtle s = turtle.Screen() def u(): t.forward(50) s.onkey(u, "Up") s.listen() ,然后就可以使用v = u。如果您要说v(),则您将无法再使用u = 4,因为现在u()指的是其他内容。