使用tkinter Entry

时间:2017-06-02 17:56:09

标签: python-3.x class tkinter

我正在创造一个游戏:佳能。您必须触摸目标,指定角度和速度。游戏分为三个阶段:

1-您选择“播放”,“选项”或“退出”

2-您选择难度“简单”,“中等”或“难”

3-游戏出现,您可以选择参数。

我的游戏分为两类,第一组(Canon)处理第一和第二阶段,第二阶段(Man)处理第三阶段。

我可以访问前两个阶段,但是当我点击“easy”“medium”或“hard”时 我收到这个错误:

“不能将序列乘以非'int'类型'float'”

并且第三个窗口显示如下(Tkinter的Entrys不在这里):

third window

这是我的班级人物(其中的一部分):

def base(self):

    self.height_c = 300
    self.width_c = 700

    self.choix = 0
    self.lang = 0

    self.flag = 0
    bool(self.flag)

    self.t = 0
    self.x = 130
    self.y = 225

    self.root = Tk()
    self.root.title("ShotDown")
    self.can = Canvas(self.root, width=self.width_c, height=self.height_c)
    self.can.grid(row=0, column=4, rowspan=4)

    self.cible = PhotoImage(file="\image\\cible.png")
    self.canon = PhotoImage(file="\image\\canon.png")
    self.canontete = PhotoImage(file="\image\\canontete.png")
    self.photo = PhotoImage(file="\image\\paysage_700.png")
    self.hc45 = PhotoImage(file="\image\hc45.png")
    self.Play = PhotoImage(file="\image\\Play.gif")

    self.angle = Entry(self.root, textvariable="hey")

    # initialisation:
    #

    # choix du fond

    if self.lang == "0000":

        self.photo = PhotoImage(file="\image\\paysage_700.png")

    elif self.lang == "0001":

        self.photo = PhotoImage(file="\image\\mer.png")

    elif self.lang == "0010":

        self.photo = PhotoImage(file="\image\\interstellar.png")

    self.y_cible = random.randint(60, 240)

    self.can.create_image(0, 0, anchor=NW, image=self.photo)
    self.image = self.can.create_image(-50, -50, image=self.hc45)

    # Creation des differents boutons
    #
    bou1 = Button(self.root, text='Quitter', width=8, command=self.root.quit)
    bou1.grid(row=0, column=2)

    bou2 = Button(self.root, text='Demarrer', width=8, command=Man.start_it(self))
    bou2.grid(row=0, column=3)

    bou3 = Button(self.root, text='Arreter', width=8, command=Man.stop_it)
    # bou3.grid(row=2, column=1)

    New_angle = StringVar()
    New_angle.set("Saisir Nouvel Angle")
    text_angle = Label(self.root, text="Angle :")
    text_angle.grid(row=1, column=2)
    self.angle = Entry(self.root, textvariable=New_angle)
    self.angle.grid(row=1, column=3)

    New_vitesse = StringVar()
    New_vitesse.set("Saisir Nouvelle Vitesse")
    text_vitesse = Label(self.root, text="Vitesse :")
    self.in_vitesse = Entry(self.root, textvariable=New_vitesse)
    text_vitesse.grid(row=2, column=2)
    self.in_vitesse.grid(row=2, column=3)

    bou_tir = Button(self.root, text='Tirer', width=8, command=Man.start_it(self))
    bou_tir.grid(row=0, column=3)

    if self.flag == 0:

        self.base = self.can.create_image(50, 260, image=self.canontete)
        self.can.create_image(self.width_c - 50, self.y_cible, image=self.cible)

    # demarrage de la boucle principale
    #

    self.root.mainloop()

如果你不明白,可以随意问^^。

感谢。

编辑:

@calico_“ - 没有看到你的所有代码”。对不起,我没有显示错误的位置:

     self.can.update()
            b = float(self.angle.get() * pi / 180)
            Vo = float(self.in_vitesse.get())
            self.t += 0.025
            self.x += (Vo * cos(b) * self.t)
            self.y -= ((-0.5 * 9.81 * (self.t ** 2)) + (Vo * sin(b) * self.t))
            print(self.x, self.y)

1 个答案:

答案 0 :(得分:2)

如果没有看到您的所有代码或完整的异常,很难告诉您确切的错误。但是,这里是对错误的解释,也可能是您看到错误的原因:

序列可以在Python中相乘。在这里,我们创建一个列表(一种序列),然后将其乘以3:

>>> x = [1,2,3]
>>> y = x*3

结果不是每个项目的乘积因子。相反,它是原始序列三次:

>>> y
[1, 2, 3, 1, 2, 3, 1, 2, 3]

另一个难题 - 当你划分两个数字时,结果值通常是一个浮点数,而不是一个整数:

>>> x = 6/3
>>> type(x)
<class 'float'>

不能将一个序列乘以一个浮点数,只有一个整数。究竟是什么例外......

因此,请查找代码的一部分,以便将序列进行相乘。完整的Traceback将帮助您找到导致错误的行。只是猜测,但你可能想要的是列表理解:

>>> y = [val*3 for val in x]
>>> y
[3, 6, 9]