LINUX.ORG.RU

Написание виджетов на pyqt5 без ооп

 , , , ,


1

1

Доброго времени суток. Мне понадобилось написать виджет круглого прогрессбара. Как это можно сделать без ООП? Я понимаю что в qt всё на ооп завязано, но можно без всяких self, class? (Написать на пайтоне) Вы можете, спросить, почему я не юзаю ООП, я отвечу: «Я просто не смог разобраться в ооп, поэтому всячески его избегаю». В статьях из инета везде копипаста. А некторые просто не открываются.



Последнее исправление: enot_obrmot (всего исправлений: 1)

Я просто не смог разобраться в ооп, поэтому всячески его избегаю

Тогда, очевидно, тебе нужно брать для своего проекта не Qt, а какой-нибудь ImGui. QtWidgets, как и GTK, объектно-ориентированные насквозь.

А ещё лучше запрограммируй… себя. На изучение ООП. Просто ООП надо воспринимать не как религию, а как полезный набор методов, позволяющих сделать крупный проект более обозримым, только и всего. Ударяться в «ООП головного мозга» при этом необязательно, да.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 4)
Ответ на: комментарий от enot_obrmot

Ну тоесть ты даже гуглить не стал. Первый результат в выдаче яндекса может и не совсем то, что тебе надо, но там кода не много и было бы желание – подогнал бы под свои хотелки.

DrBrown
()
Ответ на: комментарий от goingUp

Скажем так, меня раздражают self, классы которые нужно записывать. Куча лишнего кода получается.Я вот и не понимаю, кто это создал, и зачем, код то огромный получаетя

enot_obrmot
() автор топика
Ответ на: комментарий от enot_obrmot

классы которые нужно записывать

А структуры, которые нужно записывать, тебя не раздражают? Класс — если очень грубо, это структура плюс функции, знающие как обрабатывать поля этой структуры. Тебе надо расширить возможности — ты добавляешь поля в структуру и/или переопределяешь те или иные методы. Переопределяешь только то, что тебе явно надо, остальное наследуется. Никакого лишнего кода, если с умом писать.

hobbit ★★★★★
()
Ответ на: комментарий от enot_obrmot

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

mydibyje ★★★
()
Ответ на: комментарий от enot_obrmot

Ну смотри.

Грубо говоря, есть класс «Человек» с полями «имя», «отчество» и фамилия", у него есть метод «полноеИмя()», собирающий ФИО из этих полей.

А теперь мы унаследовали от него класс «Сотрудник», в котором можем добавить дополнительные поля: год поступления, должность и др. И можем добавить ещё метод (функцию), которая, зная эти поля, возвращает его стаж, например. При этом мы по-прежнему можем пользоваться методом «полноеИмя()», если он нам нужен. Код не дублируется, это тот же самый метод. Сотрудник остаётся человеком. :)

Звучит не очень привлекательно, если речь про одну простую функцию. Мы можем просто написать глобальную функцию и перебирать из неё все записи. Но когда их много, и они не такие простые, этот подход начинает приводить к глобальному запутанному коду. А классы позволяют упорядочить вместе данные и код по их обработки. А извне мы манипулируем самими классами.

Аналогично с виджетами. У каждого виджета в Qt есть ширина и высота. У унаследованных виджетов есть более специальные поля, например, текст у однострочного редактора. Но когда речь, скажем, о размещении виджетов в окне-владельце, дополнительные поля нам не так интересны. При этом QLineEdit позволяет собой манипулировать именно как QWidget, класс-предок.

Ещё есть инкапсуляция, но это отдельная тема. На ней многие ломаются, да.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от enot_obrmot

Типо element.setText

Ну вот. А говорил, что не понимаешь.

юзать ООП, но без написания этих наследований, классов

Если ты их юзаешь — значит, их отнаследовал (или унаследовал, но отнаследовал звучит более смачно) кто-то до тебя :)

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

Но этот код понять всё равно не получается: https://github.com/Qtlic/QtlicRoundProgressbar/blob/main/QRoundProgressbar/QRoundProgressbar.py

Селфы путают, а если забыть его поставить, то можно вообще не понять в чём дело. Ну и что это за собаки перед функциями

enot_obrmot
() автор топика
Ответ на: комментарий от enot_obrmot

Ну это особенность синтаксиса Питона (который я плохо знаю). В C++ вместо Self — this, и писать его нужно, в общем-то, только тогда, когда может возникнуть неоднозначность.

В объектном Паскале, кстати, тоже был Self :)

hobbit ★★★★★
()
Ответ на: комментарий от enot_obrmot

Подозреваю, что слово «обычный» здесь определяется исключительно привычкой.

К примеру, для человека, который всю жизнь писал на ассемблере, «обычным» будет именно ассемблерный код, и увидев непонятную абстракцию на Си, он будет норовить перевести её на «обычный» язык регистров и MOV-ов, хотя бы мысленно. Просто сейчас таких людей осталось очень мало…

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от usi_svobodi

Ну в книгах же это не объяснили, давайте уж тогда задачки по ооп дайте мне, пару штук

enot_obrmot
() автор топика
Последнее исправление: enot_obrmot (всего исправлений: 1)

Просто не смотрите на ООП как на ООП. ООП в питоне это всякое

объект.атрибут_объекта.атрибут_атрибута_объекта...

смотрите на это просто как на один длинный идентификатор, в стиле кнопка-ручки-люка-башни-танка-на-плацу. Все просто;-)

AntonI ★★★★
()