tkinter: перемещение объектов в случайные места с помощью цикла for - PullRequest
0 голосов
/ 06 января 2019

Я использую python tkinter и пытаюсь переместить мой ковчег / солнце (ТОЛЬКО 1 объект) в случайные места через (0,500) к (800,500), используя цикл for, поэтому каждый раз, когда я запускаю его, он будет в новом месте, но я продолжаю терпеть неудачу, чтобы сделать это. Если бы кто-то мог мне помочь, это бы много значило.

            from tkinter import *
            from random import *
            myInterface = Tk()
            screen = Canvas( myInterface, width=800, height=800, background="white" )
            screen.pack()

            #sky

            ##Sky
            y = 0
            y2 = 22
            skyOptions = ["#4C1D6D","#53236E","#5A2970","#623072","#693674","#703D75",\
                          "#784377","#7F4979","#86507B","#8E567C","#955D7E","#9C6380",\
                          "#A46A82","#AB7083","#B27685","#BA7D87","#C18389","#C88A8A",\
                          "#D0908C","#D7968E","#DE9D90","#E6A391", "#EDAA93","#F4B095"]
            for sky in range (1,24):
                skyColour = (skyOptions[sky%24]) 
                screen.create_rectangle (0,y,1000,y2, fill = skyColour, outline = skyColour)
                y = y + 22
                y2 = y2 + 22





            #sun (Make it randomly move plz)
            screen.create_arc(150, 250, 500, 800 ,start=0, extent=180, fill= "#fd8953", outline = "#fd8953")

            screen.update 



            spacing = 50 
            for x in range(0, 1000, spacing): 
                screen.create_line(x, 25, x, 1000, fill="red")
                screen.create_text(x, 5, text=str(x), font="Times 9", anchor = N)

            for y in range(0, 1000, spacing):
                screen.create_line(25, y, 1000, y, fill="blue")
                screen.create_text(5, y, text=str(y), font="Times 9", anchor = W)

            screen.update()

1 Ответ

0 голосов
/ 06 января 2019

Простой пример перемещения виджета на холст с помощью функции coords():

from tkinter import *
from random import *

myInterface = Tk()
screen = Canvas( myInterface, width=800, height=800, background="white" )
screen.pack()

#sun (Make it randomly move plz)
arc = screen.create_arc(150, 250, 500, 800 , start=0, extent=180,
                        fill= "#fd8953", outline = "#fd8953")

def random_move(event):
    # Generate random numbers for x and y between 0 and 99
    x = randrange(0, 100)
    y = randrange(0, 100)
    # Move arc to original + random x, y position
    screen.coords(arc, [150+x, 250+y, 500+x, 800+y])

# Create binding so random_move() is easy to invoke.
myInterface.bind('<space>', random_move)

# start mainloop() which runs the application
myInterface.mainloop()

Вам нужно запустить основной цикл приложения, иначе программа просто остановится после создания окна и виджетов. Основной цикл прослушивает события (мышь, клавиатура и т. Д.).

Также: это было много кода, большая часть которого не имела отношения к вашей проблеме. Постарайтесь минимизировать код в ваших вопросах.

Я привязываю <space> к функции random_move(), поэтому просто нажимайте пробел для каждого хода.

А; проверить Виджет холста Tkinter .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...