Найти - Пользователи
Полная версия: Визуальное программирование на Python
Начало » Python для новичков » Визуальное программирование на Python
1 2 3 4 5 6 7 8
py.user.next
Вот тебе пример, где один скрипт запускает другой несколько раз.
В архиве полные версии.

Вот окно:
def main(argv=[]):
    app = QtGui.QApplication(argv)
    ex = Example()
    return app.exec_()
 
if __name__ == '__main__':
    sys.exit(main(sys.argv))

А вот основная программа:
import w
 
def main():
    for _ in range(3):
        w.main()
 
if __name__ == '__main__':
    main()

Rodegast
Ну отдельная программа должна работать в отдельном процессе.
Вот запусти и посмотри.

Rodegast
Ты мне покажи PEP в котором написано что точку входа нужно импортировать.
В том-то и дело, что приложение Qt никакого отношения к sys.exit() не имеет. ;)
Поэтому ты и можешь выполнить их хоть десяток в пределах одной программы.
Rodegast
> Вот тебе пример, где один скрипт запускает другой несколько раз.

Вот это пример того как пишут код шизофреники. Нормальные люди пишут так:
import sys
from w import Example
 
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    for _ in range(3):
        ex = Example()
        ex.show()
    sys.exit(app.exec_())    

> В том-то и дело, что приложение Qt никакого отношения к sys.exit() не имеет.

Конечно не имеет. Это имеет отношение к потокам.
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%B0
py.user.next
Вот тебе ещё пример (расширение первого). Теперь там два разных окна и два разных повторителя.
Запусти r.py в консоли - и увидишь, как он выводит информацию об актуальном окне.

Это код r.py, найдёшь в архиве
#!/usr/bin/env python3
 
import r1
import r2
 
def main():
    r1.main()
    r2.main()
 
if __name__ == '__main__':
    main()

Мне не потребовалось ничего, чтобы сделать всю эту систему.

Rodegast
Это имеет отношение к потокам.
Если ты не заметил, функция main(), вызывающая окно, возвращает код возврата.
Rodegast
> Запусти r.py в консоли - и увидишь, как он выводит информацию об актуальном окне.
Ну и в чём прикол? В том что ты где-то там print написал? Ты бы лучше не позорился с такими примерами.

> Если ты не заметил, функция main(), вызывающая окно, возвращает код возврата.
Код возврата должен возвращать поток, а не какая-то функция. Тем более у тебя с этим кодом дальше ничего не происходит.
py.user.next
Rodegast
Ну и в чём прикол? В том что ты где-то там print написал?
Так это совсем разные print'ы. Это совершенно разные программы, которые работают как по отдельности, так и вместе.
Ты же зацикливаешься на какой-то одной программе, не понимая, что такое поток приложения. Ты не можешь запустить несколько разных программ в одной (предлагаешь процессы порождать, потому что не можешь без этого), ты не можешь масштабировать существующие программы, потому что они у тебя на это не расчитаны. Не понимаешь, что такое sys.exit(), зачем он нужен вообще в программе. Слабая теоретическая подготовка.

Rodegast
Код возврата должен возвращать поток, а не какая-то функция.
Ты знаешь вообще, что такое код возврата в программе и зачем он нужен?
Вот это оттого, что у тебя питон - первый и единственный язык. Код возврата нужен только для того, чтобы наружние приложение могли определить результат выполнения программы, так как это требуется при пакетном выполнении. То есть он не нужен ни для какого Qt, само приложение возвращает этот код, чтобы программа, в которой оно создано и запускалось, могла определить, успешно ли оно выполнилось. Это нужно для пользовательских целей, а не для системных, как тебе кажется.
Rodegast
> Это совершенно разные программы, которые работают как по отдельности, так и вместе.
Этим меня не удивить.

> Ты знаешь вообще, что такое код возврата в программе и зачем он нужен?
Ну ничего себе! Википедию прочитал и уже тролить пытается. Ну ты прям гигант!
py.user.next
Rodegast
Ну ничего себе! Википедию прочитал и уже тролить пытается.
Какую википедию, у меня первый язык - C, там всё это разжёвано со всех сторон. Ты что не знал, что когда ты запускаешь любую программу, она возвращает код возврата, даже если он там нигде не указан?
Ты когда ping делаешь в консоли, ты не знаешь, что он возвращает код возврата? И что python тоже возвращает код возврата? Даже если ты не пишешь sys.exit(), код возврата всё равно возвращается, потому что его не может не быть.

Rodegast
Ну ты прям гигант!
Ну, ты вообще морозишь всякое, как какой-то веб-программист без образования, который с пхп пересел на питон. Не знать про код возврата - это вообще. Это всё равно, что не знать, где компьютер включается. Ты в досе не сидел никогда?

То, что ты про одну точку входа где-то там прочитал, так ты просто неправильно понял эту информацию. Она значит, что нельзя одно приложение начинать несколько раз. А одно приложение продолжается от вызова app.exec_() до выхода из этого вызова. И этот .exec_() возвращает внутренний код возврата этого конкретного приложения. Почему его в sys.exit() и передают, потому что он сам по себе ничего не значит, это просто число, которое описывает, как отработало приложение. Если ноль - всё нормально. А знаешь, почему ноль, а не 1 или 12345? Потому что так сложилось исторически со времён UNIX. Ноль - это истина в UNIX, а не ноль - это ложь.
Rodegast
> Какую википедию
Я же тебе тут сцылку дал.
http://python.su/forum/topic/29455/?page=4#post-159859

> Ну, ты вообще морозишь всякое
Похоже что ты тут уже специально придуриваешся.
py.user.next
Rodegast
Я же тебе тут сцылку дал.
Да я глянул сейчас, ничего там нет, очень поверхностно.

Никогда не видел выражения
[guest@localhost ~]$ if [ 1 -le 5 ]; then echo yes; else echo no; fi
yes
[guest@localhost ~]$ if [ 6 -le 5 ]; then echo yes; else echo no; fi
no
[guest@localhost ~]$
?

Вот знаешь, что такое
[ 1 -le 5 ]
?
Это программа, которая возвращает код возврата.
И if как раз его и проверяет; истиной считается нулевой код возврата, поэтому по нулевому коду срабатывает ветвь then. А если там не нулевой код возврата, то срабатывает ветвь else.

Вот тебе ещё пример, как запустить else
[guest@localhost ~]$ if ping nothing; then echo yes; else echo no; fi
ping: unknown host nothing
no
[guest@localhost ~]$
Как получилось, что произошёл переход в else? Просто ping не сработал и вернул ненулевой код возврата. А if считает такой код ложным. Это хоть и внутреннее дело bash, как вести себя в if'е, но оно проистекает из истории, из того, как было в sh, из которого bash вырос.

Rodegast
Похоже что ты тут уже специально придуриваешся.
Я могу тебе пример закинуть ещё. Но ты в этих-то не разобрался. Там просто, я боюсь, у тебя вообще крыша поедет от того, как оно там всё работает. Ведь оно перевернёт всю твою теорию, что типа планета держится на трёх китах - что приложение может быть только одно в каждый момент времени.
Rodegast
> Я могу тебе пример закинуть ещё.
И нахрена ты мне их вообще показываешь? Напомню что я привёл 3 довода доказывающие что твоя методичка отстой:
1) Основное окно наследуется от QWidget
2) Метод initUI
3) Зачем то сделали функцию main.
Все эти примеры никакого отношения к этому не имеют.
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