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

ООП. Как правильнее сделать?

09.12.2018, 18:35. Показов 663. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только начал изучать этот ЯП. До этого с ООП не сталкивался, только процедурный подход.
В python классы являются объектами. И, если, например, я объявляю класс вроде своего нестандартного виджета. В дальнейшем я смогу создать точно-такой же, просто унаследовав его от родителя и передав нужные параметры?
Меня сбивает с толку, что здесь объекты визуально прописываются на форме. И тогда непонятно зачем плодить классы, если мы им будем передавать кучу параметров, которые будут "кастомизировать" элемент.
Т.е., допустим, я создал класс окна программы, которых по задаче предусмотрено 3. Я изначально настроил его свойства вроде геометрии, свойства sizeable, цвет фона, при создании считал разрешение экрана клиента, чтобы вычислить оптимальные координаты отрисовки, кнопки далее и.т.д.
Т.е. КАК мне создать еще 2 таких же окна (допустим после нажатия кнопки на форме)?
Смотрел кучу примеров по реализации классов, но не могу разобраться как это "натянуть" на мою задачу.
Допустим, в этом участке кода, я создаю "свою" кастомизированную форму главного окна, которое я захочу создавать, передавая параметры конструктору.

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
import tkinter 
import ctypes
import re
 
from tkinter import*
 
from ctypes  import *
 
window = Tk()
 
Global ClientWidth=(windll.user32.GetSystemMetrics(0)) 
Global ClientHeight =(windll.user32.GetSystemMetrics(1))
Global XRes=700
Global YRes=960
Global FormCount=1
 
window.title("Лабораторная работа №3") 
window.geometry('%dx%d+%d+%d' %
                (XRes,YRes,
                (ClientWidth-XRes)/2,(ClientHeight-YRes)/2-20))
window.resizable(0, 0)
window.configure(bg='white')
 
NextBtn = Button(Form, text="Next->",   
              width=60,height=20,
              font="TrebuchetMS 16",
              bg='White',
              fg='Black')
NextBtn.pack()
Как мне правильно описать класс окна, которое будет иметь набор свойств, чтобы я его мог потом наследовать?
Я понял как это сделать через функцию, к-рую можно биндить к кнопке. Но это сработает для 1 окна.
Что делать, если окон будет не 3, а 10?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def create_win(event): #описывается ивент, к-рый будет привязан к кнопке
    Form = Tk()
    Global ClientWidth=(windll.user32.GetSystemMetrics(0)) 
    Global ClientHeight =(windll.user32.GetSystemMetrics(1))
    Global XRes=700
    Global YRes=960
    Global FormCount=1
 
    Form.title("Лабораторная работа №3") 
    Form.geometry('%dx%d+%d+%d' %
                (XRes,YRes,
                (ClientWidth-XRes)/2,(ClientHeight-YRes)/2-20))
    Form.resizable(0, 0)
    Form.configure(bg='white')
    NextBtn = Button(Form, text="Next->",   
              width=60,height=20,
              font="TrebuchetMS 16",
              bg='White',
              fg='Black')
    NextBtn.bind("<Button-1>", create_win)
    NextBtn.pack()
    Form.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2018, 18:35
Ответы с готовыми решениями:

Архитектура приложения. Как правильнее сделать в моем случае?
Доброе утро. Исходные данные моей задачи: Есть форма, содержащая 5 страниц (с абсолютно разным дизайном и полями), в которые...

Сделать игру на Python, используя как можно больше ООП
https://drive.google.com/open?id=1clpRhxlbP1J8kj7pHvG43Kf-wc1_1Wrr вот ссылка там задание, помогите пожалуйста, Питонисты и Пайтоняшки:)

Атрибуты класса в ООП. Как сделать атрибут одним для всех экземпляров?
Доброго времени суток. Возник вопрос как реализовать такой момент. Я пишу консольного дурака на ООП и немного не понимаю как сделать общим...

1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
10.12.2018, 18:04
Цитата Сообщение от Guitarist Посмотреть сообщение
И, если, например, я объявляю класс вроде своего нестандартного виджета. В дальнейшем я смогу создать точно-такой же, просто унаследовав его от родителя и передав нужные параметры?
Класс - это описание, программный код, оформленный определённый образом. Наследование нужно, если вы описываете немного (как правило) другой класс, с более специфичным поведением.

Объект - это экземпляр класса, который сидит у вас в памяти программы. Чтобы создать много объектов - вы просто вызываете много раз конструктор, наследование тут не при чём. Все созданные вами объекты будут созданы по одному описанию.
Цитата Сообщение от Guitarist Посмотреть сообщение
Т.е., допустим, я создал класс окна программы, которых по задаче предусмотрено 3.
Исходя из вышеизложенного - класс один, три - объекта этого класса.
Цитата Сообщение от Guitarist Посмотреть сообщение
Т.е. КАК мне создать еще 2 таких же окна (допустим после нажатия кнопки на форме)?
Очевидно, вызвав конструктор класса ещё дважды.

Я не разбираюсь в Tk(), но вижу, что вы не создаёте свой кастомный класс, унаследованый от стандартного виджета. У вас в коде этого нет. Tk() - это вряд ли вообще виджет, это, скорее всего, класс для всего Tk-шного приложения, который у вас будет в единственном экземпляре (это называется синглтон).

Цитата Сообщение от Guitarist Посмотреть сообщение
Form.mainloop()
И вот эта штука должна вызываться единожды на всё приложение. То есть - за пределами ваших классов, которых будет больше одного.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2018, 18:04
Помогаю со студенческими работами здесь

ООП как будет правильнее а как будет работать быстрее
Всем привет! Начнем с моего примера... Подключение к базе данных Access, но суть идет не о том как подключиться а как более правильно...

Как правильнее сделать?
Как правильно сделать: сначала создать интерфейс программы(формы , фреймы , кнопки и т. д.) или написать программный код?!

Как правильнее сделать адаптив?
Делал адаптив сайта и впал в ступор, а именно как лучше дальше сделать. Макет адаптивной версии меня так же вгоняет в ступор, потому что...

Как сделать лучше (правильнее)?
Вариант №1 кода: // type TLength = {} type TLength = { length: number; } // function getLength() function getLength(param:...

Подскажите как правильнее сделать
и так, решил я написать для себя страницу календаря в обучающих целях с какой-нибудь js логикой. создал контейнер, в него запихнул...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru