Форум сайта python.su
RudiumДля тебя проблема - сделать сотню независимых друг от друга точек. Всё у тебя куда-то связано-завязано. Это далеко не всегда так.
Разумеется я не представляю, какую сложность ты создал в своей программе.
RudiumС чего ты взял, что они должны перерисовываться одновременно? Видишь, ты мыслишь однопоточно. Этот сигнал может прийти от кнопки, а может прийти откуда-то ещё, и точка должна среагировать на оба, каждый раз получая такой сигнал. Там может таймер такой сигнал посылать.
Чтобы нарисовать сто точек по клику, нужно создать один сигнал
Отредактировано py.user.next (Июнь 1, 2017 15:51:49)
Офлайн
> Это к TDD никак не относится.
Ну вообще-то это был сарказм.
> Чтобы что-то передать, надо объект создать … в отложенном режиме.
Имелось в виду, то что размер объекта имеет значение.
> Какой один сигнал? Каждая точка зависит от своего собственного объекта, который ей сигнал посылает в любой момент
Да у кнопки должен быть один сигнал и один слот. И уже в слоте должна происходить перерисовка твоих точек. Если у тебя как-то по другому, то тебя по рукам бить надо.
Онлайн
py.user.nextСпасибо за мем! Теперь я буду любого человека, не знающего требований к программе, называть “Человек с однопоточным мышлением”)))
Отредактировано Rudium (Июнь 1, 2017 16:05:50)
Офлайн
RudiumПотому что на питоне это оказалось не так, как на C++. Неужели ты думаешь, что если там называется Qt и здесь называется PyQt - то оно реализовано одинаково?
И вопрос, почему ты не увидел замедления работы программы, когда представил как она работает до того, как написал ее?
RudiumРаньше не было UML, ты думаешь, из-за этого не писали программ каких-либо? Были блок-схемы обычные, это всё рисовалось на миллиметровке.
Ты ведь можешь обойтись без всех этих UML, кодирования и другой фигни для новичков?
RudiumА проектирование, по-твоему, из космоса берётся? Сначала человек представляет часть, потом рисует её. Но даже это не значит, что он не может представить все части без их зарисовки. Просто делают зарисовку, чтобы потом не представлять всё повторно. Когда оно нарисовано, голова свободна для новых представлений. Если же у тебя не нарисовано, то ты должен каждый раз всё это воспроизводить. И проблема даже не в этом, а в том, что ни о чём другом ты подумать не можешь, так как сознание занято этой информацией.
И еще один вопрос: сколько нужно потоков мышления, чтобы представить как работает система управления космическим кораблем “Буран”, не приступая к ее проектированию?
RodegastЭто ты с чего взял, что у кнопки должен быть слот? Кнопка посылает сигнал, дальше кто этот сигнал принимает, она не знает.
Да у кнопки должен быть один сигнал и один слот.
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QMainWindow):
closeApp = QtCore.pyqtSignal()
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.closeApp.connect(self.close)
self.closeApp.connect(self.print_message)
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Emit signal')
self.show()
def mousePressEvent(self, event):
self.closeApp.emit()
def print_message(self):
print('message')
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
main()
RudiumЗачем куда-то переходить, если можно пользоваться всем сразу? Однопоточному мозгу этого не понять, конечно. :)
P.S Спасибо за хорошее настроение, надеюсь что ты не перейдешь полностью на C++ и не покинешь нас.
Отредактировано py.user.next (Июнь 2, 2017 00:39:41)
Офлайн
> Потому что на питоне это оказалось не так, как на C++
Мил-человек у тебя АРХИТЕКТУРНАЯ ошибка, а это значит что если твой слот на Qt будет работать чуть медленнее, или если сигналов будет не 100, а к примеру 1000. То ты с ней и на cpp столкнёшься.
> Здесь сигнал соединён с двумя слотами.
Такого быть не должно.
Отредактировано Rodegast (Июнь 2, 2017 11:37:21)
Онлайн
RodegastЯ конечно дико извиняюсь, но хотелось бы спросить почему? По моему прелесть сигналов как раз и заключается в том что их можно соединить с несколькими слотами.
Такого быть не должно.
[code python][/code]
Офлайн
> Я конечно дико извиняюсь, но хотелось бы спросить почему?
Потому что порядок вызова слотов точно не определён. Он предсказуем, но никто не может гарантировать что его не поменяют в следующей версии Qt.
Отредактировано Rodegast (Июнь 2, 2017 11:29:18)
Онлайн
RodegastС чего ты взял-то? Сигнал - это сообщение внутри приложения, и кто на него реагирует, нигде не определяется. Это особенность параллельных программ. У события (event) то же самое устройство - оно происходит и на него реагирует кто угодно. Событие таймера или событие нажатия клавиши. А по-твоему следует, что если кто-то нажал клавишу A, то на это должен реагировать только один объект.
Мил-человек у тебя АРХИТЕКТУРНАЯ ошибка
RodegastГде ты это прочитал?
Такого быть не должно.
RodegastНу и что? Порядок прихода сообщений тоже не определён. Используется только тот факт, пришло ли оно вообще. Там даже есть специальные методы у сигнала, поглотить сигнал или пропустить его дальше. Как-то ты это не учёл; по-твоему, поглощение сигнала нужно просто так.
Потому что порядок вызова слотов точно не определён.
Отредактировано py.user.next (Июнь 2, 2017 13:39:12)
Офлайн
> С чего ты взял-то?
Если ты 100 отложенных вызовов в место 1 считаешь частью правильной архитектуры, то с тобой не о чем разговаривать.
Онлайн
RodegastНе, ты должен сказать “я читал то-то и то-то”.
Если ты 100 отложенных вызовов в место 1 считаешь частью правильной архитектуры, то с тобой не о чем разговаривать.
Офлайн