Найти - Пользователи
Полная версия: [PyQt4] Обновление переменной
Начало » GUI » [PyQt4] Обновление переменной
1 2
Артур12121
И примеров использования в инете нет.
villager
и текст программы никак не выложить сюда?
Артур12121
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("Добавление в общий список")

table = FreezeTableWidget(self)

self.connect(quit, QtCore.SIGNAL("clicked()"), self.addWork)

def addWork (self):


app = QtGui.QApplication(sys.argv)
qb = QuitButton()
qb.show()
app.exec_()
table = FreezeTableWidget(self) # содержит информацию которую надо обновить
Обновление должно происходить после вызова addWork()
villager
и где главное окно (которое нужно обновить)?
где sql?
где,к конце концов beginInsertRows, с ошибкой?
Артур12121
villager
и где главное окно (которое нужно обновить)?
где sql?
где,к конце концов beginInsertRows, с ошибкой?
# -*- 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() подскажите а лучше покажите как правильно записать, буду очень благодарен. Так же хотел бы услышать суровую критику по коду :)
villager
в этом коде не видно, что table на экране отображается :)

но в общем по теме:
в addDBS надо сделать после conn.commit()
table.model().reset()
для этого в этом надо сделать table членом класса QuitButton

и вообще тут каша
главное окно должно содержать QTableView и QPushButton ы - Добавить, Удалить, Исправить
к ним коннектим методы обработчики, которые уже выбрасывают модальные окна типа QuitButton
после каждого окна и выдаем table.model().reset() для обновления таблицы на экране
кактотак

а beginInsertRows - когда изменения в БД пишет сама модель (нужно юзать QtSql)
Артур12121
in addDBS
table.model().reset()
AttributeError: ‘module’ object has no attribute ‘model’

“а beginInsertRows - когда изменения в БД пишет сама модель (нужно юзать QtSql)” - спасибо за совет.

Пойду дальше копать в документации
villager
это зачем?
import table

table в addDBS - это модуль, который в первой строке импортируется
а тот из __init__ там и остался
поэтому все плохо
не стоит копать документацию, не поняв основ
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