Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 8, 2010 21:46:41

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

Привет всем! Никогда раньше не имел дела с созданием .exe файлов так что нужна ваша помощь.
Как сделать exe файл допустим из такого(form.py):

#!usr/bin/python
#-*- coding: utf-8 -*-
from PyQt4 import QtGui
import sys

app=QtGui.QApplication(sys.argv)
f=QtGui.QWidget()
b=QtGui.QPushButton("Закрыть",f)
b.clicked.connect(quit)
f.show()
app.exec_()
Пробовал так:
cd c:\
C:\Python31\Scripts\cxfreeze form.py --target-dir dist
exe создается нормально,но че то эффект не тот что надо(При запуске сразу же закрывется)
P.S. В чем причина? с обычными консольными программами работает норм!
Если не трудно покажите пример.



Офлайн

#2 Апрель 9, 2010 00:11:08

Skyler
От:
Зарегистрирован: 2009-07-23
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

Хочется exe файл? Кодируй на C++ или C#, нафига питона мучить?



Офлайн

#3 Апрель 9, 2010 06:43:18

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

Я лично делал так: в папке с фризом лежат примерчики в том числе и для PyQt, тама должен быть файлик setup.py. Посмотрев в него (всего то пару строк) и исправив для своей программы убедился, что “python setup.py –build” работатет без нареканий. Получится 18Мб папка с модулями библиотеками и экзешником. Говорят можно размер уменьшить, но я пока не заморачивался.



Офлайн

#4 Апрель 9, 2010 16:06:40

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

Хочется exe файл? Кодируй на C++ или C#, нафига питона мучить?
Никто питон не мучает)))Мне то и без exe не стремно!А вот что ты принесешь заказчику?.py-от которого он будет в шоке или .exe-который не вызовет у него непоняток?я думаю все очевидно)))

Я лично делал так: в папке с фризом лежат примерчики в том числе и для PyQt, тама должен быть файлик setup.py. Посмотрев в него (всего то пару строк) и исправив для своей программы убедился, что “python setup.py –build” работатет без нареканий. Получится 18Мб папка с модулями библиотеками и экзешником. Говорят можно размер уменьшить, но я пока не заморачивался.
Все спасибо будем ковырять и пробовать!



Офлайн

#5 Апрель 9, 2010 19:04:34

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

dartNNN короче я нашел пример там где ты сказал и сделал как там( и действительно все работает),НО если имеется База Данных то при запуске exe программа открывается, но не подключается модель к вьехе (QTableView)
Вот код для формы(main.py):
#!usr\bin\python
#-*- coding: utf-8 -*-
from PyQt4 import QtGui,QtSql,QtCore
import sys
from database import Baza

class Proba(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.resize(300,300)
self.view=QtGui.QTableView(self)

model=QtSql.QSqlQueryModel()
model.setQuery("SELECT * FROM persons")
model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model,"№"))
model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model,"Имя"))
model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model,"Фамилия"))

self.view.setModel(model)
button_add=QtGui.QPushButton("Добавить",self)
button_add.setGeometry(100,200,100,30)
button_del=QtGui.QPushButton("Удалить",self)
button_del.setGeometry(100,240,100,30)

button_add.clicked.connect(self.add_start)
button_del.clicked.connect(self.del_zapis)

def add_start(self):
self.form_add=QtGui.QWidget()
self.form_add.setWindowModality(QtCore.Qt.ApplicationModal)
kompanovka=QtGui.QVBoxLayout(self.form_add)
self.form_add.setGeometry(100,200,100,30)
label_name=QtGui.QLabel("Имя")
self.edit_name=QtGui.QLineEdit()
label_surname=QtGui.QLabel("Фамилия")
self.edit_surname=QtGui.QLineEdit()
button_apply=QtGui.QPushButton("ОК")
kompanovka.addWidget(label_name)
kompanovka.addWidget(self.edit_name)
kompanovka.addWidget(label_surname)
kompanovka.addWidget(self.edit_surname)
kompanovka.addWidget(button_apply)
self.form_add.show()

button_apply.clicked.connect(self.add_zapis)

def add_zapis(self):
a=self.edit_name.text()
b=self.edit_surname.text()
query=QtSql.QSqlQuery()
query.exec("INSERT INTO persons(name,surname) VALUES(:n,:s)")
query.bindValue(":n",a)
query.bindValue(":s",b)
query.exec_()

self.refresh()
self.form_add.hide()

def del_zapis(self):
if self.view.currentIndex().row()>=0:
row=self.view.currentIndex().row()
index=self.view.model().index(row,0)
id=str(self.view.model().data(index))

query=QtSql.QSqlQuery()
query.exec("DELETE FROM persons WHERE id=:id")
query.bindValue(":id",id)
query.exec_()

self.refresh()

def refresh(self):
model=QtSql.QSqlQueryModel()
model.setQuery("SELECT * FROM persons")
model.setHeaderData(0, QtCore.Qt.Horizontal,QtCore.QObject.trUtf8(model,"№"))
model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model,"Имя"))
model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model,"Фамилия"))
self.view.setModel(model)

app=QtGui.QApplication(sys.argv)
bd1=Baza()
bd1.connection_bd()
my_class=Proba()
my_class.show()
app.exec_()
Вот код для Базы:
#!usr\bin\python
#-*- coding: utf-8 -*-
from PyQt4 import QtSql

class Baza():
def connection_bd(self):
db=QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("baza")
if not db.open():
print("Ошибка открытия БД!")
return False
query=QtSql.QSqlQuery()
query.exec("CREATE TABLE IF NOT EXISTS persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(30),surname VARCHAR(30))")
return True
и вот код для setup.py:
import sys

from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
base = "Win32GUI"

setup(
name = "main",
version = "0.1",
description = "Sample cx_Freeze PyQt4 script",
executables = [Executable("main.py", base = base)])
и вот код в консоли:
cd c:\
C:\setup.py build
Подскажи пожалуйста в чем дело?



Отредактировано (Апрель 9, 2010 19:07:15)

Офлайн

#6 Апрель 10, 2010 11:28:38

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

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



Офлайн

#7 Апрель 10, 2010 11:56:57

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

dartNNN
Проблема в том, что экзешник не видит ни одного драйвера, потому он к базе не коннектится. Копаю дальше
Да я тоже где то это читал!там вроде говорилось что как то надо добавить sqlite3.dll(но я точно не помню)!Тоже буду копать по этой теме.
может тут че есть:
http://sourceforge.net/mailarchive/forum.php?forum_name=cx-freeze-users
поглядим



Отредактировано (Апрель 10, 2010 12:08:12)

Офлайн

#8 Апрель 10, 2010 12:32:48

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

Как я понимаю, драйвера sql находятся в папке Python31\Lib\site-packages\PyQt4\plugins\sqldrivers. Вот там собственно и лежит длл-ка qsqlite.dll. Пробовал я ее подключить через bin-includes, но епрст, никакого результата. Хз че с ним делать.



Офлайн

#9 Апрель 10, 2010 12:41:29

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

dartNNN
Как я понимаю, драйвера sql находятся в папке Python31\Lib\site-packages\PyQt4\plugins\sqldrivers. Вот там собственно и лежит длл-ка qsqlite.dll. Пробовал я ее подключить через bin-includes, но епрст, никакого результата. Хз че с ним делать.
Все проблема решена)))
Надо лишь после создания exe из Python31\Lib\site-packages\PyQt4\plugins\sqldrivers скопировать целеком папку sqldrivers в папку с exe и все канает:
http://www.riverbankcomputing.com/pipermail/pyqt/2010-January/025578.html
И еще возник такой вопрос что прописать в setup.py чтобы установить иконку для exe-файла или это надо вообще еше в gui мутить?



Отредактировано (Апрель 10, 2010 15:06:12)

Офлайн

#10 Апрель 10, 2010 16:21:25

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

exe файл(cx_Freeze,Python 3.1,Pyqt4)

Ну это совсем просто идешь на сайт http://cx-freeze.sourceforge.net тама документация, все команды описаны, есть там и для иконки. И пишешь примерно так:

icon_file = "path/to/file"
buildOptions = dict(icon = icon_file)

setup(
name = "main",
version = "0.1",
description = "Sample cx_Freeze script",
options = dict(build_exe = buildOptions),
executables = [Executable("test.py", base = base)])



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version