Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Почему не выводится ничего на экран [RSS Feed]

#1 Окт. 11, 2013 04:56:24

catalyst306
Зарегистрирован: 2013-09-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

Пишу маленькую программку, в которой есть квадрат и он должен отбиваться от стенок окна.

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 не появляется.
В чем причина?

Офлайн

#2 Окт. 11, 2013 09:50:07

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

У тебя же вечный while.



Офлайн

#3 Окт. 11, 2013 17:13:47

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

Где методы движения?
Зачем корневое окно задавать в цикле?
Распишите общий код, а я помогу реализовать :)



Офлайн

#4 Окт. 11, 2013 21:21:14

catalyst306
Зарегистрирован: 2013-09-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

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()

Отредактировано catalyst306 (Окт. 11, 2013 21:23:15)

Офлайн

#5 Окт. 11, 2013 22:15:58

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

Я все равно не пойму зачем нужен цикл?
Какая его задача. Бесконечно получать данные и двигать квадрат?



Офлайн

#6 Окт. 11, 2013 23:35:42

catalyst306
Зарегистрирован: 2013-09-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

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()

Офлайн

#7 Окт. 12, 2013 00:49:20

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

Это не очень хорошая практирка. Больше так не делайте.

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()



Отредактировано 4kpt (Окт. 12, 2013 00:50:09)

Офлайн

#8 Окт. 12, 2013 02:47:17

catalyst306
Зарегистрирован: 2013-09-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

4kpt
Это не очень хорошая практирка. Больше так не делайте.
как получить координаты квадрата?

Офлайн

#9 Окт. 12, 2013 22:38:05

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Почему не выводится ничего на экран

Явно их передать :)



Офлайн

  • Начало
  • » GUI
  • » Почему не выводится ничего на экран[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version