Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17

Как в этом примере заставить класс ColorLabel изменять canvas’и из класса Window?

05.08.2014, 12:43. Показов 753. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в этом примере заставить класс ColorLabel изменять canvas’и из класса Window
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
from tkinter import *
 
 
class ColorLabel(Label):
    def __init__(self, root, color):
        Label.__init__(self, root, text=color, bg='white', fg=color, relief=RAISED)
        self.bind('<Double-1>', self.change_canvas_color)
 
    def change_canvas_color(self, event):
        pass # как здесь изменить цвет соответствующего canvas
        # (соответствующего значит если label находится в frame1, то изменять он должен canvas1)
 
 
class Window(Tk):
    def __init__(self):
        Tk.__init__(self)
 
        self.canvas1 = Canvas(self, bg='red')
        self.canvas1.pack(side=LEFT)
        self.frame1 = Frame(self)
        self.frame1.pack(side=RIGHT)
        for color in ['red', 'blue', 'green']:
            ColorLabel(self.frame1, color).pack(side=TOP)
 
        self.canvas2 = Canvas(self, bg='blue')
        self.canvas2.pack(side=LEFT)
        self.frame2 = Frame(self)
        self.frame2.pack(side=RIGHT)
        for color in ['red', 'blue', 'green']:
            ColorLabel(self.frame2, color).pack(side=TOP)
 
Window().mainloop()
в качестве возможного решения задачи будет ли нормальным передавать в ColorLabel в параметрах конструктора ссылку на соответствующий canvas (ну то есть буквально так ColorLabel(self.frame1, color, self.canvas2) например), или же это не нормально, так как нарушает инкапсуляцию класса Window
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2014, 12:43
Ответы с готовыми решениями:

Объясните поведение атрибутов класса в этом примере
Всем доброго времени суток. Прошу объяснить не понятное для меня поведение кода. Далее пример кода. Полный код примера: class...

Как создать вложенный класс с возможностью изменять значения основного класса?
Доброго времени суток! Помогите советом, так как последнее время, до меня что-то тяжело всё доходит( Пишу для себя игру, в свободное...

Как изменять значения таблицы в данном примере?
И скиньте пожалуйста какую нибудь статью или видео на эту тему, хоть убей не пойму как с таблицами работать через JS. И тут скорее всего...

4
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.08.2014, 10:16
Я лично не вижу смысла создавать 2 класс, в вашем случае это избыточно.
У вас в этом классе всего 1 метод и то он не наделяет ваш класс какой-то особенной возможность.

Создавайте в классе Window экземпляры класса Label, а вообще для таких целей лучше подойдёт Button и вешайте на эти экземпляры нужные события.
0
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17
06.08.2014, 12:14  [ТС]
Я лично не вижу смысла создавать 2 класс, в вашем случае это избыточно.
У вас в этом классе всего 1 метод и то он не наделяет ваш класс какой-то особенной возможность.

Создавайте в классе Window экземпляры класса Label, а вообще для таких целей лучше подойдёт Button и вешайте на эти экземпляры нужные события.
Извиняюсь за этот бессмысленной пример, но он создан искусственно для того показать суть самой проблемы.
Поверьте в реальной задаче разделение на классы необходимо, к тому же и самих классов на даний момент не 2, а 6. Заменять всё на Button тоже не вариант, поскольку в реальности обработка событий нужна в том числе и двойной щелчок, как в примере.
Я не выкладывал здесь мою реальную наработку, потому что на одно её изучение могло б пойти много времени, поэтому и создал этот пример.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.08.2014, 12:18
Тогда банальное передавай объекты у которых нужно изменить цвет в нужное место и все.
А другой вариант если и можно придумать, то уже только смотря на реальный пример.
1
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 17
06.08.2014, 19:22  [ТС]
OK спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2014, 19:22
Помогаю со студенческими работами здесь

Как изменять слои у объектов-контейнеров в canvas Unity
Есть несколько объектов-контейнеров в canvas, в которых находятся другие объекты UI. Соответственно при их активации один объект по слою...

Как заставить DNS сервер динамически изменять IP?
Здравствуйте. Как заставить DNS сервер на windows server 2003 с Active Directory динамически изменять IP адрес при смене его у хоста? В...

Как заставить DataGrid изменять источник данных?
Вообщем я везде облазил и читал много чего. Пытаюсь разобраться с ситуацией: Допустим есть: &lt;DataGrid...

Как происходит обращение к окружению (в этом примере)?
Объясните пожалуйста простой приме из из книги &quot;Программирование на языке Lua&quot; Иерузалимски Роберту. function factory (_ENV) ...

как заставить CrystalReportViewer экспортировать, печатать, искать и изменять масштаб?
У нас есть страница, на ней размещена панель CrystalReportViewer как заставить эту панель экспортировать,печатать,искать и изменять...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru