Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83

Зависание при отрисовке квадратов

07.04.2017, 21:13. Показов 1035. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, дорогие форумчане!

Проблема заключается в следующем: программа - отрисовывет разноцветные квадраты в зависимости от введённых данных. Данные вводятся пользователем - количество квадратов в строке, общее количество квадратов и частота их отрисовки. При вводе значения 25 в параметр "количество квадратов в строке" и 160 в параметр "общее количество квадратов" все работает отлично, но если вводить 45, 55 и т.д. в параметр "количество квадратов в строке" и 160 в параметр "общее количество квадратов", то программа останавливается на конце первой строки. Подозреваю, что проблема связана с делением. И ещё вопрос. Как при условии полного заполнения окна квадратами, удалить все строки, кроме последней, при этом последнюю сдвинуть на положение первой строки и продолжить выполнение программы, при необходимости. Надеюсь на Вашу помощь.

Код программы:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# -*- coding: utf-8 -*-
 
from Tkinter import *
import time
from random import choice
 
 
def draw(i, y, count, color, number_in_string, number, refresh_rate):
        size = 800//number_in_string
        size1 = 600//number_in_string
        x = 0 + i * size
        canvas.create_rectangle(x,y, x+size, y+size1, fill=color, outline=color)
        if x+size == 800:
            i = -1
            y = y + size1
        #if y+size == 600:
             #удалить и сдвинуть
        if count == number:
            return
        count = count + 1
        canvas.after(refresh_rate, lambda: draw(i+1, y, count, choice(colors), \
        number_in_string, number, refresh_rate))
 
if __name__ == "__main__":
    print 'Enter the number of elements in string:'
    number_in_string=input()
    print 'Enter the number of elements:'
    number=input()
    print 'Enter refresh rate:'
    refresh_rate=input()
    print 'The number of elements in string:', number_in_string
    print 'The number of elements:', number
    print 'Refresh rate:', refresh_rate
 
    tk = Tk()
    tk.title("laboratory_number_5")
    tk.wm_geometry("800x600+20+40")
    canvas = Canvas(tk, width=800, height=600)
    colors = "Red Orange Yellow Green LightBlue Blue Violet".split()
    draw(0, 0, 0, choice(colors), number_in_string, number, refresh_rate)
    canvas.pack()
    tk.mainloop()
Добавлено через 17 минут
По поводу зависания на первой строке - понял, что связано с делением. Решение пока придумал только такое:

Python
1
    if x+size == size * number_in_string:
. Изменил условие в методе draw. Но остаётся пустое место в строках. И немного сбивается размер прямоугольников в начале сток.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2017, 21:13
Ответы с готовыми решениями:

Задержка при отрисовке квадрата
Здравствуйте, дорогие форумчане! Нужна Ваша помощь. Написал код, который рисует прямоугольник, а именно квадрат, и при этом через заданное...

Ошибка при отрисовке
Всем привет, не могу разобраться в коде, а точнее в ошибке,которую выдает программа. Очень буду благодарна за помощь

Прозрачность при отрисовке
Проблема заключается в следующем: Создал простейшее окно и нарисовал там обычный квадрат красного цвета, все нарисовалось отлично. ...

2
 Аватар для pashtet-kun
135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 400
10.04.2017, 15:45
немного переделал по первому вопросу:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# -*- coding: utf-8 -*-
 
from Tkinter import *
import time
from random import choice
 
 
def draw(row, col, color, count, last_row):
 
        x1 = col * sizeX
        y1 = row * sizeY
        x2 = x1 + sizeX
        y2 = y1 + sizeY
        rectId = canvas.create_rectangle(x1,y1,x2,y2, fill=color, outline=color)
 
        last_row.append(rectId)
        if count == number_total:
            print "Done!"
            return
 
        count += 1
        col += 1
        if (col > cols - 1):
            col = 0
            row += 1
            last_row = []
 
        
        canvas.after(refresh_rate, lambda: draw(row, col, choice(colors), count, last_row))
 
 
if __name__ == "__main__":
    width = 800
    height = 600
 
    print 'Enter the number of quadrats in row:'
    cols=input()
    print 'Enter the total number of quadrats:'
    number_total=input()
    print 'Enter refresh rate (in msec):'
    refresh_rate=input()
    print 'The number of elements in row:', cols
    print 'The number of elements:', number_total
    print 'Refresh rate:', refresh_rate
 
    rows=number_total//cols
    print "rows: ", rows
 
    sizeX = width//cols
    sizeY = height//cols
    print 'sizeX: %d; sizeY: %d' % (sizeX, sizeY)
 
    tk = Tk()
    tk.title("laboratory_number_5")
    tk.wm_geometry("%dx%d+20+40" % (width, height))
    canvas = Canvas(tk, width=width, height=height)
    colors = ["Red","Orange","Yellow","Green","LightBlue","Blue","Violet"]
    draw(0, 0, choice(colors), 1, [])
    canvas.pack()
    tk.mainloop()
А по-второму вопросу нужно использовать методы канвы move() и delete()
1
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
10.04.2017, 19:38  [ТС]
Спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2017, 19:38
Помогаю со студенческими работами здесь

Помощь при отрисовке
Есть программа скринмейт, программа нарезает изображения и тп, но когда заходит на второй круг, то остается голубой фон предидущего...

Ошибка при отрисовке линии
Добрый день гении! Пытаюсь разобраться с QPainter, QPaintEvent для того, чтобы рисовать собственно в своих программах. Только начал и...

Ошибка при отрисовке меню
Всем доброго дня (ну, или что у вас там за окошком :) )! Пробую создать сайт в учебно-тренировочных целях. Структура такова: ...

Пробелы при отрисовке текста
Текст рисуется с пробелами - рис. слева (исп. System.Drawing.Graphics: DrawText и MeasureString). Надо плотнее, как на рис. справа. Как...

Мерцание при отрисовке на pictureBox
Вызываю функцию по тику таймера: public void Draw(float x, float y) { Graphics g =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru