LINUX.ORG.RU

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

 , , , ,


1

1

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



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

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

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

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

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

Не не не, я хочу на qt сделать. Ну а изучить ооп то я пробовал, вообще ничего нормально не работает, что я пробовал делать с ООП, какие то self, class

enot_obrmot
() автор топика

Я понимаю что в qt всё на ооп завязано

…поэтому можно просто освоить ООП, что пригодится, а не нарабатывать разный странный опыт, типа как сделать виджет на qt без ООП)

goingUp ★★★★★
()

Для UI не нужно «настоящее ООП».

Ну или попробуй собрать wxWidgets на Qt, и с ними собрать wxPython.

Там совсем примитивный код будет получаться.

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

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

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

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

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

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

Прибейт меня, я писал circle, и не находилось.. Так, но всё равно ещё не совсем то. Хорошо, как нормально изучить ООП?

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

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

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

Ну смотри.

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

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

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

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

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

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

Но блин, в qt можно даже не создавать классы в коде программы. Типо сразу юзать ООП, но без написания этих наследований, классов. Типо element.setText

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

Типо element.setText

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

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

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

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

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

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

enot_obrmot
() автор топика

Я уже подзабыл питон, но он вроде весь ООП, даже без Qt в питоне все структуры это объекты, даже числа

>>> n = 19
>>> bin(n)
'0b10011'
>>> n.bit_count()
3
mydibyje ★★★★
()
Ответ на: комментарий от enot_obrmot

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

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

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

Да и не особо понятно как что делать, в интернетах пишут вообще что то странное, по типу этого

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

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

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

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

С этим к питонистам. Ты тег python поставил? Вижу, поставил, молодец, может, кто и откликнется.

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

Просто скажу так, смысл в рождении людей в прогах?

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

Так я хочу просто сказу написать типо так QButton.setText(«что-то там»), так нет нужно, self.QButton.setText(«что-то там»). (Написал код примерно)

enot_obrmot
() автор топика
Ответ на: комментарий от enot_obrmot
>>> class A:
...     def x(self, num):
...             return num * 2
... 
>>> A.x(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: A.x() missing 1 required positional argument: 'num'
>>> A().x(2)
4

решай ребус

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

Есть проблема, на следующий день я это забуду… И так половину команд пайтона забыл

enot_obrmot
() автор топика

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

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

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

AntonI ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.