Считывание и отправка данных из полей формы в Google таблицу

В коде этой инструкции будут использоваться следующие виджеты, созданные в программе Qt Designer.

routePoint - виджет LineEdit для ввода названия точки маршрута,

latitude - виджет LineEdit для ввода широты точки маршрута,

longitude - виджет LineEdit для ввода долготы точки маршрута,

descriptionPoint - виджет TextEdit для ввода описания точки маршрута,

imagePoint - виджет LineEdit для ввода ссылки с файлом картинки маршрута,

sendPoint - виджет PushButton для отправки данных в форму.

Настроенный, согласно инструкции https://tutorcloud.ru/mod/page/view.php?id=833 , проект открываем в Pycharm.
Запускаем и проверяем, что все работает.
Для считывания и ввода данных в таблицу можно использовать кажущийся очевидным поячейквый метод:
 
Но так делать нерационально и неграмотно.
Используем метод добавления в таблицу целой строки worksheet.insert_row(). Строка добавится с номера 2.

Осталось разобраться, как добавлять строку после последней заполненной в таблице. Для этого уберем numberPoint из раздела глобальных переменных и будем назначать этот номер в зависимости от заполненности таблицы.

Полный код по окончанию этого этапа будет таким:
import sys  # sys нужен для передачи argv в QApplication
from PyQt5 import QtWidgets
import design # Это наш конвертированный файл дизайна
import gspread # Библиотека для взаимодействия с гугл таблицами
from oauth2client.service_account import ServiceAccountCredentials #библиотека для авторизации

# Определяем область доступа
scope = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive']

# Загружаем учетные данные
creds = ServiceAccountCredentials.from_json_keyfile_name('galichroutes-449709-ab64df0863a1.json', scope)

# Авторизуемся и создаем клиент
client = gspread.authorize(creds)

# Открываем таблицу по названию
spreadsheet = client.open('Достопримечательности Галича')

# Открываем первый лист, который имеет номер 0
#worksheetPoint = spreadsheet.get_worksheet(0)

#Либо можно обратиться к листу прямо по его имени
worksheetPoint = spreadsheet.worksheet('Точка маршрута')

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
def __init__(self):
# Это здесь нужно для доступа к переменным, методам
# и т.д. в файле design.py
super().__init__()
self.setupUi(self) # Это нужно для инициализации нашего дизайна
(self.sendPoint.clicked.connect(self.sender))

def sender(self):
old_data = worksheetPoint.get_all_records()
if old_data != []:
numberPoint = int(old_data[len(old_data)-1]['Номер'])
print(old_data)
print(numberPoint)
else:
numberPoint = 0
rowPoint = [str(numberPoint + 1), # генерируем новый номер точки маршрута
self.routePoint.text(),
self.latitude.text(),
self.longitude.text(),
self.descriptionPoint.toPlainText(),
self.imagePoint.text()]
worksheetPoint.insert_row(rowPoint, len(old_data)+2) #индексы строк начинаются с 1, а первая - заголовочная


def main():

app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication
window = ExampleApp() # Создаём объект класса ExampleApp
window.show() # Показываем окно
app.exec_() # и запускаем приложение

if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем
main() # то запускаем функцию main()

Last modified: Sunday, 2 February 2025, 5:28 PM