当前位置: 首页 > 知识库问答 >
问题:

为什么这种事后陈述不起作用?[副本]

孟晋
2023-03-14

我在move\u r函数中有after语句。但当我点击空格键时,它说

TypeError: move_r() missing 1 required positional argument: 'event'

我相对知道这意味着什么,但我不知道该怎么改变我的程序应该画一个火箭,然后当你点击太空时,火箭向上移动。不幸的是,我的程序每次点击空格只会上升100次,而不是一次点击空格就自动上升,这是我的目标。我的代码是:

from tkinter import *
import random, time
tk = Tk()
tk.wm_attributes('-topmost', 1)
canvas = Canvas(tk, width=1000, height=1000, bd=0)
canvas.pack()
def rocket(): #draws rocket
        rocketbase=canvas.create_rectangle(x2+50, y2-50, x3-50, y3-90, fill ='blue')
        rrocketfin=canvas.create_rectangle(x2+60, y2-50, x3-40, y3-20, fill ='#e69100')
        lrocketfin=canvas.create_rectangle(x2+40, y2-50, x3-60, y3-20, fill ='#e69100')
        mrocketfin=canvas.create_rectangle(x2+54, y2-50, x3-53, y3-20, fill ='#e69100')
        lrockethead=canvas.create_rectangle(x2+45, y2-125, x3-60, y3-70, fill ='#e69100')
        rrockethead=canvas.create_rectangle(x2+60, y2-125, x3-45, y3-70, fill ='#e69100')
def move_r(event):
    if event.keysym == 'space':
        global y2
        global y3
        y2-=100
        y3-=100
        canvas.after(100, move_r )

x2=460
y2=940
x3=570
y3=900
r1=None 
tk.bind('<KeyPress-space>', move_r)
while True:
    background = canvas.create_rectangle(0, 0, 1000, 1000, fill = 'red') 
    base=canvas.create_rectangle(0, 1000, 1000, 900, fill='#86592d')
    rocket()
    tk.update()


tk.mainloop()

共有1个答案

东郭昌胤
2023-03-14

这是一个移动的火箭;它不能解决您所有的问题,但它解决了您提出的问题:

该事件是一个按键-当您按下空格键时生成,并发送到事件处理程序。

事件处理程序接收事件,并对其进行操作(识别什么事件,并将流引导到应该的位置-此处,移动火箭)。

移动火箭做到这一点,它通过回调循环移动火箭。

from tkinter import *
import random, time
tk = Tk()
tk.wm_attributes('-topmost', 1)
canvas = Canvas(tk, width=1000, height=1000, bd=0)
canvas.pack()


def rocket(): #draws rocket
        rocketbase=canvas.create_rectangle(x2+50, y2-50, x3-50, y3-90, fill ='blue')
        rrocketfin=canvas.create_rectangle(x2+60, y2-50, x3-40, y3-20, fill ='#e69100')
        lrocketfin=canvas.create_rectangle(x2+40, y2-50, x3-60, y3-20, fill ='#e69100')
        mrocketfin=canvas.create_rectangle(x2+54, y2-50, x3-53, y3-20, fill ='#e69100')
        lrockethead=canvas.create_rectangle(x2+45, y2-125, x3-60, y3-70, fill ='#e69100')
        rrockethead=canvas.create_rectangle(x2+60, y2-125, x3-45, y3-70, fill ='#e69100')

def handle_key_press(e):
    if e.keysym == 'space':
        move_r()

def move_r():
    global y2
    global y3
    y2 -= 50
    y3 -= 50
    rocket()
    tk.update()
    canvas.after(100, move_r)



x2=460
y2=940
x3=570
y3=900
r1=None 
tk.bind('<KeyPress-space>', handle_key_press)

background = canvas.create_rectangle(0, 0, 1000, 1000, fill = 'red') 
base = canvas.create_rectangle(0, 1000, 1000, 900, fill='#86592d')
rocket()
tk.update()


tk.mainloop()
 类似资料:
  • 问题内容: 我有以下代码: 我希望它能打印a = 2 b = 1,但它却打印相反的东西。因此很明显,swap方法不会交换a和b值。为什么? 问题答案: 这与整数的不变性无关。它与 Java是值传递 ,该死 的事实有关! (不烦恼,只是文章标题:p) 总结一下:您实际上不能在Java中创建交换方法。您只需要在需要的地方自己进行交换即可。反正这只是三行代码,所以应该不成问题:)

  • 我有一个h2作为唯一的项目在一个容器div。我在容器上使用position:relative和h2上使用position:absolute/bottom:0使它与容器底部对齐。但是,我无法使h2文本与容器div的右侧对齐。 HTML: CSS: 链接:http://www.distributionaccess.com/new/stempath/about.html 我在h2上尝试了display:

  • 我第一次用一个辅助数组实现了合并排序,以尝试使用JavaScript实现可视化。这似乎应该是有效的,但它不是。任何帮助或提示将不胜感激。 编辑:我忘了包括它不起作用的情况。它们是: 输入:[4, 2, 5, 6, 7, 7]输出:[4, 2, 5, 6, 7, 7] 输入:[6,6,6,4,6,2]输出:[4,6,6,6,6,2] 输入:[6, 7, 3, 10, 7, 9, 6, 3, 4, 6

  • 问题内容: 我尝试在另一个div内的div上添加边距值。除最高值外,其他所有方法均正常运行,似乎被忽略了。但为什么? 我的期望: 我对保证金的期望是:50px 50px 50px 50px; 我得到的是: 我得到的保证金是:50px 50px 50px 50px; 码: 问题答案: 您实际上看到的是元素的顶部边缘塌陷到元素的顶部边缘,仅保留了边缘空白(尽管未在图像中显示)。两个框的顶部边缘彼此齐平

  • 我尝试在另一个div中添加一个div的边距值。所有的工作都很好,除了顶部的值,它似乎被忽略了。但为什么? 代码: null null W3学校没有解释为什么margin会这样做。

  • 问题内容: 我正在尝试通过以下方式将日期范围划分为各个日期: 而且我不知道为什么不起作用,因为日期仍然相同,所以循环变得无限。 问题答案: plusDays不会改变原始的,您必须分配结果: