Создайте гоночный автомобиль на Python. Почему моя машина не гоночная? - PullRequest
0 голосов
/ 29 сентября 2019

Я работаю над проблемой домашнего задания для моего курса Python, который должен отображать автомобиль (понял), а затем автомобиль должен имитировать движение через окно до его конца, а затем перезапускаться в начале.У меня есть функция гонки, которая должна делать это, но она ничего не делает.У меня чертовски много времени с классами и ткинтером.Я знаю, что мне нужно увеличивать значение x каждый раз, когда оно зацикливается и обновляется, чтобы машина выглядела как движущаяся, я просто не знаю, как это реализовать.Правильно ли написано мое логическое значение?Я пытался что-то изменить с помощью функции несколькими способами, но я не могу заставить ее что-то делать, поэтому я должен что-то упустить.

ОБНОВЛЕНИЕ: Я переместил метод гонки вкласс, и вызвал его в конструкторе.Я поместил оператор print, чтобы получить значение x в методе race, и он показывает, что x увеличивается правильно, но когда я запускаю программу, моя машина исчезает.Таким образом, он обновляет значение x, как и должно, но не отображает графику.Код обновлен ниже

Любые предложения приветствуются!

# Import tkinter
from tkinter import *

# Set the height and Width of the window
width = 800
height = 800

# Create race car class with canvas as the argument
class RacingCar(Canvas):

    # Constructor
    def __init__(self, master, width, height):

        # Constructor
        Canvas.__init__(self, master, width = width, height = height)

        # Create x and y variables for starting position
        self.x = 10
        self.y = 40

        # Display the car
        self.display_car()
        self.race()


    # Function to display car
    def display_car(self):

        # Delete original car
        self.delete("car")

        # Create first wheel
        self.create_oval(self.x + 10, self.y - 10, self.x + 20,\
                        self.y, fill = "black", tags = "car")

        # Create the second wheel
        self.create_oval(self.x + 30, self.y - 10, self.x + 40,\
                        self.y, fill = "black", tags = "car")

        # Create the body
        self.create_rectangle(self.x, self.y - 20, self.x + 50,\
                        self.y - 10, fill = "green", tags = "car")

        # Create the roof
        self.create_polygon(self.x + 10, self.y - 20, self.x + 20,\
                            self.y - 30, self.x + 30, self.y - 30,\
                            self.x + 40, self.y - 20, fill = "green",\
                            tags = "car")
        def race():
            while True:
               if self.x < width:
                  self.x += 2
               else: 
                  self.x = 0

                  self.after(88)

                  self.update()



window = Tk()
window.title("Racing Car")

racecar = RacingCar(window, width = 240, height = 50 )
racecar.pack()


window.mainloop()

1 Ответ

0 голосов
/ 29 сентября 2019

Это может не быть сделано (поэтому я делаю этот ответ в вики сообщества), но я предлагаю вам переместить метод race в классе:

class RaceCar(Canvas):
    # Your current code
    def race(self):
        while True:
            if self.x < width:
                self.x += 2
            else:
                self.x = 0
            self.after(88)
            self.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...