Найти - Пользователи
Полная версия: Визуальное программирование на Python
Начало » Python для новичков » Визуальное программирование на Python
1 2 3 4 5 6 7 8
py.user.next
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 и переведены на питон (причём не в лучшем виде), либо вот такие, как сказать, велосипеды или даже не велосипеды, а творения с импортированием всего и кучей как неповоротливых, так и лишних проверок. Как по такому можно учиться?

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

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

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

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

> Там всё не только вылизано до блеска
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()
Вот этот отстой ты называешь вылизанным до блеска?
FishHook
Rodegast
Это пример реализации машины состояний.
Это хорошо, что вы знаете, что машина состояний на русский переводится как “конечный автомат”,
очень хорошо, что вы знаете. Используйте, пожалуйста, общеупотребительную лексику, а то мы запутаемся.

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

Это как бы синонимы… Например в книге “Qt Профессиональное программирование Марк Саммерфилд” написано “конечные автоматы”, а в книге “Qt 4.8 Профессиональное программирование на C++ Макс Шлее” написано “машина состояний”.
FishHook
Rodegast
Это как бы синонимы
Вы наберите в гугле “машина состояний” и посмотрите на результаты,
а если вы мне будете рассказывать, что вас ТАК где-то там учили, я вас забаню (шутка-шутка).
Rodegast
> Вы наберите в гугле “машина состояний” и посмотрите на результаты,

Набрал, посмотрел, ничего неожиданного не увидел.
py.user.next
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. Там есть ещё абстрактный автомат, который может не быть конечным. А машина состояний - это машина Тьюринга, которая в общем случае имеет бесконечную ленту.
Rodegast
> Почувствуй разницу, как говорится.

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

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

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

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

Чхал я на то как оно переводится.
py.user.next
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
Чхал я на то как оно переводится.
Ну, ты неправильно говоришь. Ты говоришь, что это синонимы, а это далеко не синонимы.
Rodegast
> Так он не ограничивается оконностью. Виджет - более абстрактное понятие, чем просто окно.

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

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

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

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

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

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

Я говорил что "это как бы синонимы" что указывает на не полное соответствие определению.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB