PyQt Автоматические повторяющиеся формы - PullRequest
2 голосов
/ 12 июля 2009

В настоящее время я пытаюсь перенести устаревшее приложение VBA / Microsoft Access на Python и PyQt. У меня не было проблем с переносом какой-либо логики, и большинство форм тоже были несложными. Однако я столкнулся с проблемой в самой важной части приложения - основной форме ввода данных.

Форма - это строка текстовых полей, соответствующих полям в базе данных. Пользователь просто вводит данные в поля, вкладки для следующего и повторяет. Когда он подходит к концу записи / строки, он снова вкладывает, и форма автоматически создает новую пустую строку для него, чтобы начать ввод данных снова. (На самом деле, он отображает «пустую» строку под текущей новой записью, на которую пользователь может фактически нажать, чтобы начать новые записи.) Он также позволяет пользователю прокручивать вверх и вниз, чтобы увидеть все текущие подмножества. записей, над которыми он работает.

Есть ли способ воспроизвести эту функцию в PyQt? Мне не удалось найти способ заставить Qt сделать это легко. Access позаботится об этом автоматически; код вне формы не требуется. Это легко в PyQt (или даже близко), или это то, что нужно будет программировать с нуля?

1 Ответ

3 голосов
/ 12 июля 2009

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

QSqlTableModel также поддерживает редактирование полей базы данных.

Полагаю, единственная функциональность, которую вам придется реализовать вручную, это "TAB" в конце таблицы, чтобы создать новую строку, если вы хотите сохранить ее.

Я мало что знаю о Access, но с помощью драйвера ODBC-SQL вы сможете использовать реальную базу данных доступа для вашей разработки или тестирования. Здесь есть более старая информация здесь рассмотрите возможность перехода на Sqlite, Mysql или другую актуальную базу данных SQL.

...