Найти - Пользователи
Полная версия: Почему не выводится ничего на экран
Начало » GUI » Почему не выводится ничего на экран
1
catalyst306
Пишу маленькую программку, в которой есть квадрат и он должен отбиваться от стенок окна.

check=False
from tkinter import*
rect_x=50#x0 of rect 
rect_y=50#y0 of rect 
rect_x1=rect_x+rect_x#x1 of rect
rect_y1=rect_y+rect_y#y1 of rect
rect_change_x=5#change X speed
rect_change_y=3#change Y speed
while check==False:
    if rect_y > 450 or rect_y < 0:
        rect_change_y = rect_change_y * -1
    if rect_x > 650 or rect_x < 0:
        rect_change_x = rect_change_x * -1
    rect_x+=rect_change_x#changing x
    rect_y+=rect_change_y#changing y
    rect_x1+=rect_change_x#changing x1
    rect_y1+=rect_change_y#changing y1
    root=Tk()
    c=Canvas(root,bg='yellow',width=700,height=500)
    c.pack()
    rect=c.create_rectangle(rect_x,rect_y,rect_x1,rect_y1,fill='black')
root.mainloop()

Вроде бы написал все правильно но окошко Tkinter не появляется.
В чем причина?
agalen
У тебя же вечный while.
4kpt
Где методы движения?
Зачем корневое окно задавать в цикле?
Распишите общий код, а я помогу реализовать :)
catalyst306
4kpt
Где методы движения?Зачем корневое окно задавать в цикле?Распишите общий код, а я помогу реализовать
Ну по сути это и есть все,остальное я там сам допишу(меню .изменение размеров квадрата ,поля и тд и тп).
Пока что ,закрываем просто окно ,выход из цикла будет потом,по нажатию ctrl-z
И да,маленькие изменения в коде:
check=False
from tkinter import*
rect_x=50#начальные координаты
rect_y=50#начальные координаты
rect_x1=rect_x+rect_x#начальные координаты
rect_y1=rect_y+rect_y#начальные координаты
rect_change_x=5#изменение по х
rect_change_y=3#изменение по у
root=Tk()
c=Canvas(root,bg='yellow',width=700,height=500)
while check==False:
    if rect_y > 450 or rect_y < 0:
        rect_change_y = rect_change_y * -1
    if rect_x > 650 or rect_x < 0:
        rect_change_x = rect_change_x * -1
    rect_x+=rect_change_x#Вот изменение x0
    rect_y+=rect_change_y#Вот изменение y0
    rect_x1+=rect_change_x#Вот изменение x1
    rect_y1+=rect_change_y#Вот изменение y1
    rect=c.create_rectangle(rect_x,rect_y,rect_x1,rect_y1,fill='black')
c.pack()
root.mainloop()
4kpt
Я все равно не пойму зачем нужен цикл?
Какая его задача. Бесконечно получать данные и двигать квадрат?
catalyst306
4kpt
Я все равно не пойму зачем нужен цикл?Какая его задача. Бесконечно получать данные и двигать квадрат?
Все нашел правильное решение ,спасибо.
Но есть маленькая загвоздка? как удалять “след” от пути квадрата?
То есть рисуется новый квадрат,а старый остается.
c.delete(rect) не работает

__author__ = 'Anton'
check=False
from tkinter import*
rect_x=50#x0 of rect
rect_y=50#y0 of rect
rect_x1=rect_x+rect_x#x1 of rect
rect_y1=rect_y+rect_y#y1 of rect
rect_change_x=10#change X speed
rect_change_y=3#change Y speed
root=Tk()
c=Canvas(root,bg='yellow',width=700,height=500)
c.pack()
def paintloop():
    global check,rect_x,rect_y,rect_x1,rect_y1,rect_change_x,rect_change_y
    root.after(100, paintloop)
    rect=c.create_rectangle(rect_x,rect_y,rect_x1,rect_y1,fill='black')
    if rect_y > 450 or rect_y < 0:
        rect_change_y = rect_change_y * -1
    if rect_x > 650 or rect_x < 0:
        rect_change_x = rect_change_x * -1
    rect_x+=rect_change_x#changing x
    rect_y+=rect_change_y#changing y
    rect_x1+=rect_change_x#changing x1
    rect_y1+=rect_change_y#changing y1
root.after(0,paintloop)
root.mainloop()
4kpt
Это не очень хорошая практирка. Больше так не делайте.

global check,rect_x,rect_y,rect_x1,rect_y1,rect_change_x,rect_change_y

Можно значительно проще. Держите

import tkinter
root = tkinter.Tk()
cnv = tkinter.Canvas(root, bg='yellow', width=700, height=500)
cnv.pack()
rect = cnv.create_rectangle(50, 50, 100, 100, fill='black')
def paintloop():
    cnv.move(rect, 2, 2)
    root.after(10, paintloop)
root.after(0, paintloop)
root.mainloop()
catalyst306
4kpt
Это не очень хорошая практирка. Больше так не делайте.
как получить координаты квадрата?
4kpt
Явно их передать :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB