Added relations data dialog wich is called from AddData form

master
svk28 2017-04-04 17:05:15 +03:00
parent 2234722708
commit 44baf080db
2 changed files with 114 additions and 6 deletions

2
dm.py
View File

@ -325,7 +325,7 @@ def insertDataIntoBD(dataList):
qweryData = qweryData + '' + item[1] + ','
elif fType == 'datetime':
# преобразуем дату всяко разно
dt = datetime.strptime(item[1], "%d.%m.%Y %H:%M")
dt = datetime.strptime(item[1], "%d.%m.%y %H:%M")
item[1] = str(dt)
qweryData = qweryData + '\'' + item[1] + '\','
elif fType == 'date':

118
gui.py
View File

@ -17,7 +17,7 @@ class MyTable(QTableWidget):
self.horizontalHeader().setStretchLastSection(True)
self.horizontalHeader().setCascadingSectionResizes(True)
# равномерное изменение ширины столбцов
#self.horizontalHeader().setSectionResizeMode(1)
self.horizontalHeader().setSectionResizeMode(1)
# изменение ширины столбцов по размеру текста
#self.horizontalHeader().setSectionResizeMode(3)
self.horizontalHeader().setStyleSheet("color: black; font-weight:bold; background-color: lightblue;")
@ -54,7 +54,102 @@ class MyTable(QTableWidget):
for currentQTableWidgetItem in self.selectedItems():
print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())
# Форма для добавления и редактирования
# Диалог выбора связанных данных
class RelationDataView(QMainWindow):
lblList = []
editList = []
def __init__(self, tblName, editWidget, field, lbl, rel):
super().__init__()
self.tblName = tblName
self.editWidget = editWidget
self.lbl = lbl
self.tblDescr = dm.getTablesDescriptionOfName(tblName)
self.field = field
self.rel = rel
self.setWindowTitle(self.tblDescr)
self.setGeometry(300, 300, 640, 480)
scroll_widget = QWidget()
self.general_layout = QVBoxLayout()
#scroll_area = QScrollArea()
l = QVBoxLayout()
headBox = QHBoxLayout()
lblHeader = QLabel("<B>Таблица: " + self.tblDescr)
l.addLayout(headBox)
headBox.addWidget(lblHeader)
hboxData = QHBoxLayout()
self.tableViewData = MyTable()
#print(self.widgetsList)
hboxData.addWidget(self.tableViewData)
hboxBtn = QHBoxLayout()
btnOk = QPushButton('Ок')
btnOk.clicked.connect(lambda: self.ok())
btnCancel = QPushButton('Закрыть')
btnCancel.clicked.connect(lambda: self.close())
l.addLayout(hboxData)
hboxBtn.addWidget(btnOk)
hboxBtn.addWidget(btnCancel)
l.addLayout(hboxBtn)
self.general_layout.addLayout(l)
scroll_widget.setLayout(self.general_layout)
#scroll_area.setWidget(scroll_widget)
self.setCentralWidget(scroll_widget)
addDataIntoTable(self.tblName, self.tableViewData)
def ok(self):
#listData = [self.tblName]
#listFieldData = []
# выбираем из выделенной строки значение нужной ячейки
# соответсвующей полю связанной таблицы
for currentQTableWidgetItem in self.tableViewData.selectedItems():
lstFields = dm.getTableStructure(self.tblName)
i = 0
for fieldItem in lstFields:
if fieldItem[0] == self.field:
#print(fieldItem, i)
self.editWidget.setText(self.tableViewData.item(currentQTableWidgetItem.row(), i).text())
# пррячем воле ввода
self.editWidget.hide()
print(self.lbl.text())
# в метку добавляем значения для подставновки соответсвенно связи
txt = '<b>'+str(self.getDataFromTableWidget(currentQTableWidgetItem.row()))
# устанавливаем текст на метку и включаем её
self.lbl.setText(txt)
self.lbl.setVisible(True)
break
i = i+1
self.close()
# получаем данные из таблицы для соответсвующих полей
# для подставновки в форму редактирования(добавления) для связей
def getDataFromTableWidget(self, row):
fields = self.rel.split(',')
lstFields = dm.getTableStructure(self.tblName)
print(fields)
print(lstFields)
txt = ''
for item in fields:
item = item.rstrip(' ').lstrip(' ')
print(item)
i = 0
for fieldItem in lstFields:
if fieldItem[0] == item:
print(item, fieldItem)
print(self.tableViewData.item(row, i).text())
txt = txt + ' ' +self.tableViewData.item(row, i).text()
i = i + 1
print(txt)
return txt
# Форма добавления записи в БД
class EditForm(QMainWindow):
lblList = []
editList = []
@ -63,6 +158,7 @@ class EditForm(QMainWindow):
super().__init__()
self.tblName = tblName
self.setWindowTitle("Добавление записи")
#self.setGeometry(300, 300, 400, 400)
scroll_widget = QWidget()
self.general_layout = QVBoxLayout()
scroll_area = QScrollArea()
@ -94,6 +190,8 @@ class EditForm(QMainWindow):
fDescr = dm.getFieldDescription(tblName, fName)
hboxEdit = QHBoxLayout()
lbl = QLabel(fDescr)
lbl2 = QLabel(fDescr)
lbl2.hide()
#listRelationTableAndField = []
btnRelations = ''
@ -130,6 +228,7 @@ class EditForm(QMainWindow):
self.widgetsList.append([fName, edit])
hboxEdit.addWidget(lbl)
hboxEdit.addWidget(lbl2)
hboxEdit.addWidget(edit)
# добавляем к полю кнопку для вызова связанных
print(fName)
@ -145,7 +244,7 @@ class EditForm(QMainWindow):
btnRelations.setFixedWidth(30)
# добавляем название виджета в список соответсвия кнопок и таблиц БД
# пиздец извращения =(
self.btnRelationsList.append([btnRelations, tableRelation, fieldRelation, replaceField])
self.btnRelationsList.append([btnRelations, tableRelation, fieldRelation, replaceField, edit, lbl2, replaceField])
btnRelations.clicked.connect(lambda: self.openRelationTable())
hboxEdit.addWidget(btnRelations)
l.addLayout(hboxEdit)
@ -179,9 +278,16 @@ class EditForm(QMainWindow):
if sender == item[0]:
btn = item[0]
tbl = item[1]
fld = item[2]
lbl = item[5]
rel = item[6]
editWidget = item[4]
# выбираем данные из БД
data = dm.selectData(tbl)
print(data)
#data = dm.selectData(tbl)
#print(data)
relForm = RelationDataView(tbl, editWidget, fld, lbl, rel)
relForm.show()
#relForm.setParent(self)
def clickTablesList(tbl_name, tblDataWidget, data='NULL'):
@ -302,6 +408,7 @@ def showMenuToolbar(window):
toolbar.addAction(printAction)
# toolbar.addAction(exitAction)
# форма для добавления новой записи
def addNewRecord():
global listTables, tblRelationsData
tblDescr = listTables.model().data(listTables.currentIndex())
@ -317,6 +424,7 @@ def addNewRecord():
#editForm.setParent(tblRelationsData)
#editForm = Example()
# отображение списка связанных данных
def showRelationsRecords(fieldIndex, fieldValue):
global tabRelationsData, listTables
tblDescr = listTables.model().data(listTables.currentIndex())