Найти - Пользователи
Полная версия: Запуск .py двойным щелчком в Windows7
Начало » Python для новичков » Запуск .py двойным щелчком в Windows7
1 2
vshnukrshna
Здравствуйте.
Всего несколько часов изучаю Python и вообще программирование, поэтому не судите строго за ламерский вопрос..
Итак, я хочу при двойном щелчке на файл .py получать окошко ‘hello world!’.
На данный момент сделал GUI в Qt 4.8.4 на Python 3.3. Это окошко я могу запускать из командной строки и все работает как надо, но хотелось бы запускать простым двойным щелчком.
Я так понимаю, что когда я щелкаю по .py-файлу вылетает cmd, сама программа мгновенно исполняется и все закрывается. Так вот есть-ли способ остановить это мгновенное выполнение? Я знаю, что обычно ставится строка input(), но я ее тыкаю в разные места исходного кода и никакого эффекта не наблюдается. К тому же, такой вариант не слишком изящный. Я хочу чтоб, программа и cmd закрывались по нажатию крестика на окошке.
JOHN_16
Целых ПАРУ часов изучаете Python и уже за GUI взялись? ну гений, что тут сказать.

Python программы принято запускать из cmd, если хотите в windows по двойному щелчку, то делайте. ЧТо касается GUI - называйте исполняемый файл с расширением *.pyw и привязывайте его в Windows на исполнение через pythonw.exe.
Консольных програм это не касатеся, а то что вы хотите - ну это милион милионов раз обсуждалось на каждом первом форуме по программированию на python. Дружите чаще с Гуглом, он действительно много знает.
doza_and
У вас похоже пробел не в питоне а в знаниях об операционной системе.
vshnukrshna
но хотелось бы запускать простым двойным щелчком.
Я так понимаю консоль у вас открывается, значит и программа запускается. Этот вопрос снят. А так windows решает что делать с файлом по его расширению. По умолчанию установщик питона делает ассоциацию на python.exe файлов *.py *.pyw. Если что-то сломалось по правой кнопке отредактируйте свойства - раздел тип файла - и выберете правильно приложение.

vshnukrshna
программа и cmd закрывались по нажатию крестика на окошке
Научите как вы сделали что это не так.
Я заморочился и написал мегапрограмму:
print("hello")
input()
Консольное окно прекрасно закрывается при:
1 нажатии enter
2 ctrl+C
3 нажатии на крестик
Кстати нажатие на крестик не рекомендую, долго и все равно что выгнать программу из туалета не дав ей надеть штаны.
т.е. Приводите максимально упрощенный пример программы которая вызывает у вас проблему.
vshnukrshna
Спасибо.
Как пример, привожу код:
from PyQt4 import QtGui, QtCore
 
class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Test', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)
 
    def handleButton(self):
        print ('Hello World')
 
if __name__ == '__main__':
 
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
Через CMD все замечательно, но если переименовать в .pyw и затем щелкнуть два раза, то ничего даже не запускается…
И еще проблема: интерфейс PyQt как-то уж слишком глючно работает..навожу курсор на кнопки в меню (Файл, Правка, Вид…Справка…и.т.д.) и они выделяются но не нажимаются.А иногда нажимаются. Вообщем какая-то чертовщина.
ZeUsM
vshnukrshna
Спасибо.Как пример, привожу код:
Очень странно, ваш код даже без изменений в файле с расширением *.pyw запустился без проблем.
Заметил, что PyQT для пайтона 3.3 действительно сильно глюкав, советую 2.7 и горя не будет
doza_and
vshnukrshna
то ничего даже не запускается…
Ну дальше берите мою мегапрограмму и посмотрите как она будет себя вести.
переименовав в *.pyw получите что она “не выполняется”.
модифицируем код и проверяем еще раз:
print("hello")
open("aa.dat","w").write("hello")
input()
У меня получается файл aa.dat.

А как у вас?
vshnukrshna
Спасибо за ответы!
Так, вообщем откатился на python 2.7. Теперь .pyw работает так как надо и тему, в принципе, можно было бы закрывать, но… мне этого мало . Теперь я хочу преобразовать этот .pyw в .exe. Я использовал cx_Freeze, и exe создается и, вроде, даже без ошибок, но не работает. Щелкаю по нему - вылетает CMD и тут же закрывается. И все. Далее, пробую py2exe, но получаю сообщение, что нет какого-то MSVCP90.dll. Ребята, можете доступно объяснить что надо делать и какой компилятор лучше использовать?
ZeUsM
vshnukrshna
Спасибо за ответы!Так, вообщем откатился на python 2.7. Теперь .pyw работает так как надо и тему, в принципе, можно было бы закрывать, но… мне этого мало . Теперь я хочу преобразовать этот .pyw в .exe. Я использовал cx_Freeze, и exe создается и, вроде, даже без ошибок, но не работает. Щелкаю по нему - вылетает CMD и тут же закрывается. И все. Далее, пробую py2exe, но получаю сообщение, что нет какого-то MSVCP90.dll. Ребята, можете доступно объяснить что надо делать и какой компилятор лучше использовать?
Для 2.7 я использовал pyinstaller он умеет работать с Qt, делает 1 файл *.exe (опция -F) -w соберет без консоли, можно задавать иконки, использовать UPX и много ещё чего. Использование очень простое (как мне показалось).
vshnukrshna
ZeUsM
Для 2.7 я использовал pyinstaller он умеет работать с Qt, делает 1 файл *.exe (опция -F) -w соберет без консоли, можно задавать иконки, использовать UPX и много ещё чего. Использование очень простое (как мне показалось).
Спасибо. Попробовал Pyinstaller2.0.
Простой код, выводящий в консоли “hello world!” преобразуется в .exe без проблем и все отлично работает. Проблемы начинаются если я пытаюсь преобразовать код с gui. Никаких сообщений об ошибках нет, exe-шник создается, но не работает. Я делаю так: python pyinstaller.py -w helloworld.py. Может здесь уже есть ошибка?
ZeUsM
vshnukrshna
Очень странно, у меня все собралось и нормально запустилось.
А вывод pyinstaller-а можно выложить?
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