Уведомления

Группа в Telegram: @pythonsu

#1 Март 4, 2016 16:21:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

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)

Ну, там тоже либо взяты примеры из Qt и переведены на питон (причём не в лучшем виде), либо вот такие, как сказать, велосипеды или даже не велосипеды, а творения с импортированием всего и кучей как неповоротливых, так и лишних проверок. Как по такому можно учиться?

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



Офлайн

#2 Март 4, 2016 17:58:15

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Это что вообще?

Это пример реализации машины состояний.

> Как по такому можно учиться?

По такому нужно учится. Копируешь пример в файлик, запускаешь его, а потом разбираешься как оно работает.

> Там всё не только вылизано до блеска

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()
Вот этот отстой ты называешь вылизанным до блеска?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Март 4, 2016 18:09:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
Это пример реализации машины состояний.
Это хорошо, что вы знаете, что машина состояний на русский переводится как “конечный автомат”,
очень хорошо, что вы знаете. Используйте, пожалуйста, общеупотребительную лексику, а то мы запутаемся.



Офлайн

#4 Март 4, 2016 18:21:41

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Используйте, пожалуйста, общеупотребительную лексику, а то мы запутаемся.

Это как бы синонимы… Например в книге “Qt Профессиональное программирование Марк Саммерфилд” написано “конечные автоматы”, а в книге “Qt 4.8 Профессиональное программирование на C++ Макс Шлее” написано “машина состояний”.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Март 4, 2016 18:27:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
Это как бы синонимы
Вы наберите в гугле “машина состояний” и посмотрите на результаты,
а если вы мне будете рассказывать, что вас ТАК где-то там учили, я вас забаню (шутка-шутка).



Отредактировано FishHook (Март 4, 2016 19:59:14)

Офлайн

#6 Март 4, 2016 19:43:48

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Вы наберите в гугле “машина состояний” и посмотрите на результаты,

Набрал, посмотрел, ничего неожиданного не увидел.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Март 5, 2016 02:03:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

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. Там есть ещё абстрактный автомат, который может не быть конечным. А машина состояний - это машина Тьюринга, которая в общем случае имеет бесконечную ленту.



Офлайн

#8 Март 5, 2016 12:13:36

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Почувствуй разницу, как говорится.

Ну там же не питону учат… Мне эти примеры тоже не очень нравятся, но лучше я не нашёл.

> А что ты ожидал увидеть? Возможно, ты не понял, что это за пример такой.

Если тебе не понятно что там нет так, то я поясню (эти проблемы есть практически во всех примерах этого руководства):
1) Основное окно наследуется от QWidget
2) Метод initUI
3) Зачем то сделали функцию main.

> Конечный автомат переводится как final-state machine.

Чхал я на то как оно переводится.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Март 5, 2016 15:42:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
Ну там же не питону учат… Мне эти примеры тоже не очень нравятся, но лучше я не нашёл.
А вот источник этого примера
http://doc.qt.io/qt-4.8/qt-statemachine-rogue-example.html
то есть он просто перевёл напрямую, не учитывая возможностей питона. Даже неправильно switch() перевёл.

А вот тетрис
http://doc.qt.io/qt-5/qtwidgets-widgets-tetrix-example.html
И тут окно наследуется от…
http://doc.qt.io/qt-5/qtwidgets-widgets-tetrix-tetrixwindow-h.html
потрясающе! от QWidget.

А вот он делает окно тетриса…
http://zetcode.com/gui/pyqt4/thetetrisgame/
наследуясь от QMainWindow. А мог бы и от QWidget, как сделал автор оригинала.

Rodegast
1) Основное окно наследуется от QWidget
Так он не ограничивается оконностью. Виджет - более абстрактное понятие, чем просто окно.

Rodegast
2) Метод initUI
Ну, это вместо конструктора. Просто в C++ это всё в конструкторе пишется, а в питоне не принято так делать.

Rodegast
3) Зачем то сделали функцию main.
Да? Наверное, для того, чтобы можно было импортировать модуль и вызвать её. А без main() как ты будешь делать? только из консоли вызывать?

Rodegast
Чхал я на то как оно переводится.
Ну, ты неправильно говоришь. Ты говоришь, что это синонимы, а это далеко не синонимы.



Отредактировано py.user.next (Март 5, 2016 15:45:36)

Офлайн

#10 Март 5, 2016 17:11:05

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Так он не ограничивается оконностью. Виджет - более абстрактное понятие, чем просто окно.

Не нужно из QWidget создавать окна!

> Ну, это вместо конструктора.

А __init__ “для прикола” существует.

> Да? Наверное, для того, чтобы можно было импортировать модуль и вызвать её. А без main() как ты будешь делать? только из консоли вызывать?

И за одно выполнить sys.exit(app.exec_())

> Ты говоришь, что это синонимы, а это далеко не синонимы.

Я говорил что "это как бы синонимы" что указывает на не полное соответствие определению.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version