0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83

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

07.04.2017, 21:13. Показов 1041. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru