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)])
и вот код в консоли:
Подскажи пожалуйста в чем дело?