# -*- coding: utf-8 -*-
import sys
import table
import datetime, sqlite3
from PyQt4 import QtGui, QtCore, QtSql
class QuitButton(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 100, 1000, 550)
self.setWindowTitle('Free Work')
quit = QtGui.QPushButton('Добавить работу', self)
quit.setGeometry(10, 500, 140, 35)
quit.setToolTip("Добавление работы в общий список")
quit1 = QtGui.QPushButton('Подготовить отчёт', self)
quit1.setGeometry(150, 500, 140, 35)
quit1.setToolTip("Подготовка отчёта для распечатки")
table = FreezeTableWidget(self)
self.connect(quit, QtCore.SIGNAL("clicked()"), self.addWork)
def addWork (self):
self.setDisabled(True)
self.modal = QtGui.QWidget()
self.modal.setGeometry(400, 400, 220, 260)
self.modal.setWindowTitle('Добавить работу')
self.modal.Name = QtGui.QLabel("<b>Название:</b>", self.modal)
self.modal.Name.setGeometry(10, 10, 140, 35)
self.modal.Text = QtGui.QLabel("<b>Описание:</b>", self.modal)
self.modal.Text.setGeometry(10, 60, 140, 35)
self.modal.End = QtGui.QLabel("<b>Дата окончания:</b>", self.modal)
self.modal.End.setGeometry(10, 110, 140, 35)
self.modal.Summa = QtGui.QLabel("<b>Сумма:</b>", self.modal)
self.modal.Summa.setGeometry(10, 160, 140, 35)
self.modal.go = QtGui.QPushButton('Добавить', self.modal)
self.modal.go.setGeometry(10, 220, 204, 35)
self.modal.intup = QtGui.QLineEdit(self.modal)
self.modal.intup.setGeometry(10, 40, 200, 20)
self.modal.intup.setToolTip("Название работы")
self.modal.textarea = QtGui.QLineEdit(self.modal)
self.modal.textarea.setGeometry(10, 90, 200, 20)
self.modal.textarea.setToolTip("Описание работы")
self.modal.EndText = QtGui.QDateEdit(self.modal)
self.modal.EndText.setGeometry(10, 140, 200, 20)
self.modal.EndText.setToolTip("Дата окончания работы в формате дд-мм-гггг")
self.modal.SummaText = QtGui.QLineEdit(self.modal)
self.modal.SummaText.setGeometry(10, 190, 200, 20)
self.modal.SummaText.setToolTip("Сумма получаемая/полученная в результате работы")
self.modal.connect(self.modal.go, QtCore.SIGNAL("clicked()"), self.addDBS)
self.modal.show()
def addDBS (self):
SummaText = self.modal.SummaText.text()
EndText = self.modal.EndText.text()
textarea = self.modal.textarea.text()
intup = self.modal.intup.text()
dt = datetime.datetime.now()
tidt = dt.strftime('%Y.%m.%d')
conn = sqlite3.connect('memorys1.db')
c = conn.cursor()
c.execute("INSERT INTO `uchet` ('name','text','date_n','date_k','summa') VALUES ('" +intup+ "','" +textarea+ "','"+ tidt +"','" +EndText+ "','" +SummaText+ "')")
conn.commit()
c.close()
self.modal.close()
self.setDisabled(False)
class FreezeTableWidget(QtGui.QTableView):
def __init__(self, parent = None, *args):
QtGui.QTableView.__init__(self, parent, *args)
self.setMinimumSize(1000, 480)
tm = MyTableModel(self)
pm = QtGui.QSortFilterProxyModel(self)
pm.setSourceModel(tm)
self.setModel(pm)
self.setStyleSheet('font: 10pt "Courier New"')
hh = self.horizontalHeader()
hh.setDefaultAlignment(QtCore.Qt.AlignCenter)
hh.setStretchLastSection(True)
ncol = tm.columnCount(self)
self.setAlternatingRowColors(True)
vh = self.verticalHeader()
vh.setDefaultSectionSize(20)
vh.setDefaultAlignment(QtCore.Qt.AlignCenter)
vh.setVisible(True)
vh1 = self.horizontalHeader()
vh1.setDefaultSectionSize(120)
class MyTableModel(QtCore.QAbstractTableModel):
def __init__(self, parent = None, *args):
QtCore.QAbstractTableModel.__init__(self, parent, *args)
self.colLabels = ['Название', 'Дата начала', 'Дата окончания', 'Сумма', 'Описание'] # Заголовки столбцов
conn = sqlite3.connect('memorys1.db')
c = conn.cursor()
conn.commit()
c.execute('select * from uchet ORDER BY date_n DESC')
a = []
for row in c.fetchall():
a += [row[0], row[2], row[3], row[4], row[1]],
c.close ()
self.dataCached = a
def rowCount(self, parent):
count = len(self.dataCached)
return count
def columnCount(self, parent):
count = len(self.colLabels)
return count
def get_value(self, index):
i = index.row()
j = index.column()
return self.dataCached[i][j]
def data(self, index, role):
if not index.isValid():
return None
value = self.get_value(index)
if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
return value
elif role == QtCore.Qt.TextAlignmentRole:
return QtCore.Qt.AlignCenter
return None
def headerData(self, section, orientation, role):
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
header = self.colLabels[section]
return header
if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole:
return str(section + 1)
return None
app = QtGui.QApplication(sys.argv)
qb = QuitButton()
qb.show()
app.exec_()
обновление table = FreezeTableWidget(self) должно происходить при вызове addDBS() подскажите а лучше покажите как правильно записать, буду очень благодарен. Так же хотел бы услышать суровую критику по коду :)