Считывание и отправка данных из полей формы в Google таблицу
В коде этой инструкции будут использоваться следующие виджеты, созданные в программе Qt Designer.
routePoint - виджет LineEdit для ввода названия точки маршрута,
latitude - виджет LineEdit для ввода широты точки маршрута,
longitude - виджет LineEdit для ввода долготы точки маршрута,
descriptionPoint - виджет TextEdit для ввода описания точки маршрута,
imagePoint - виджет LineEdit для ввода ссылки с файлом картинки маршрута,
sendPoint - виджет PushButton для отправки данных в форму.
Запускаем и проверяем, что все работает.
Для считывания и ввода данных в таблицу можно использовать кажущийся очевидным поячейквый метод:
Но так делать нерационально и неграмотно.
Используем метод добавления в таблицу целой строки 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