Форум сайта python.su
RodegastНу, вот тебе оттуда код. Это что вообще?
Нет. Вот эти: https://github.com/PySide/Examples
class MovementTransition(QEventTransition): def __init__(self, window): super(MovementTransition, self).__init__(window, QEvent.KeyPress) self.window = window def eventTest(self, event): if event.type() == QEvent.StateMachineWrapped and \ event.event().type() == QEvent.KeyPress: key = event.event().key() return key == Qt.Key_2 or key == Qt.Key_8 or \ key == Qt.Key_6 or key == Qt.Key_4 return False def onTransition(self, event): key = event.event().key() if key == Qt.Key_4: self.window.movePlayer(self.window.Left) if key == Qt.Key_8: self.window.movePlayer(self.window.Up) if key == Qt.Key_6: self.window.movePlayer(self.window.Right) if key == Qt.Key_2: self.window.movePlayer(self.window.Down)
Офлайн
> Это что вообще?
Это пример реализации машины состояний.
> Как по такому можно учиться?
По такому нужно учится. Копируешь пример в файлик, запускаешь его, а потом разбираешься как оно работает.
> Там всё не только вылизано до блеска
class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): lbl1 = QtGui.QLabel('ZetCode', self) lbl1.move(15, 10) lbl2 = QtGui.QLabel('tutorials', self) lbl2.move(35, 40) lbl3 = QtGui.QLabel('for programmers', self) lbl3.move(55, 70) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Absolute') self.show() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
Офлайн
RodegastЭто хорошо, что вы знаете, что машина состояний на русский переводится как “конечный автомат”,
Это пример реализации машины состояний.
Офлайн
> Используйте, пожалуйста, общеупотребительную лексику, а то мы запутаемся.
Это как бы синонимы… Например в книге “Qt Профессиональное программирование Марк Саммерфилд” написано “конечные автоматы”, а в книге “Qt 4.8 Профессиональное программирование на C++ Макс Шлее” написано “машина состояний”.
Офлайн
RodegastВы наберите в гугле “машина состояний” и посмотрите на результаты,
Это как бы синонимы
Отредактировано FishHook (Март 4, 2016 19:59:14)
Офлайн
> Вы наберите в гугле “машина состояний” и посмотрите на результаты,
Набрал, посмотрел, ничего неожиданного не увидел.
Офлайн
RodegastЭто же просто смешно, он не знает, как обычный if … else … делать. Такое не спишешь даже на незнание питона.
Это пример реализации машины состояний.
return key == Qt.Key_2 or key == Qt.Key_8 or \ key == Qt.Key_6 or key == Qt.Key_4
valid_keys = (Qt.Key_2, Qt.Key_8, Qt.Key_6, Qt.Key_4) return key in valid_keys
RodegastА что ты ожидал увидеть? Возможно, ты не понял, что это за пример такой.
Вот этот отстой ты называешь вылизанным до блеска?
RodegastКонечный автомат переводится как final-state machine. Там есть ещё абстрактный автомат, который может не быть конечным. А машина состояний - это машина Тьюринга, которая в общем случае имеет бесконечную ленту.
Это как бы синонимы
Офлайн
> Почувствуй разницу, как говорится.
Ну там же не питону учат… Мне эти примеры тоже не очень нравятся, но лучше я не нашёл.
> А что ты ожидал увидеть? Возможно, ты не понял, что это за пример такой.
Если тебе не понятно что там нет так, то я поясню (эти проблемы есть практически во всех примерах этого руководства):
1) Основное окно наследуется от QWidget
2) Метод initUI
3) Зачем то сделали функцию main.
> Конечный автомат переводится как final-state machine.
Чхал я на то как оно переводится.
Офлайн
RodegastА вот источник этого примера
Ну там же не питону учат… Мне эти примеры тоже не очень нравятся, но лучше я не нашёл.
RodegastТак он не ограничивается оконностью. Виджет - более абстрактное понятие, чем просто окно.
1) Основное окно наследуется от QWidget
RodegastНу, это вместо конструктора. Просто в C++ это всё в конструкторе пишется, а в питоне не принято так делать.
2) Метод initUI
RodegastДа? Наверное, для того, чтобы можно было импортировать модуль и вызвать её. А без main() как ты будешь делать? только из консоли вызывать?
3) Зачем то сделали функцию main.
RodegastНу, ты неправильно говоришь. Ты говоришь, что это синонимы, а это далеко не синонимы.
Чхал я на то как оно переводится.
Отредактировано py.user.next (Март 5, 2016 15:45:36)
Офлайн
> Так он не ограничивается оконностью. Виджет - более абстрактное понятие, чем просто окно.
Не нужно из QWidget создавать окна!
> Ну, это вместо конструктора.
А __init__ “для прикола” существует.
> Да? Наверное, для того, чтобы можно было импортировать модуль и вызвать её. А без main() как ты будешь делать? только из консоли вызывать?
И за одно выполнить sys.exit(app.exec_())
> Ты говоришь, что это синонимы, а это далеко не синонимы.
Я говорил что "это как бы синонимы" что указывает на не полное соответствие определению.
Офлайн