ussr-->
Май 20, 2010 20:01:16
Здарвствуйте!
Недавно начал учить питон. Хотел бы узнать какие виджеты в PyQt лучше использовать для отображения базы данных (sqlite). Вроде нашел QTableView, но как связать с базой толком не разобрался. Понял что у Qt есть свои стандартные спобоы раоты с базой, но мне хотелось бы что б видежты PyQt только отображали, а работа с базой осуществлялось через модуль sqlite. И все изменения автоматически отображались на виджетах. Такое возможно сделать?
PS Не судите сильно, если вопрос легкий. Просто я 2й день мучаюсь и найти ни чего подходящего не мог. Заранее всем спасибо за помощь
pasaranax
Май 20, 2010 21:23:34
QTableWidget попроще будет или QListWidget, что тебе логически больше подходит. Соединить просто - берешь данные и вставляешь в ячейки :)
ussr-->
Май 21, 2010 02:05:07
U
pasaranax
QTableWidget попроще будет или QListWidget, что тебе логически больше подходит. Соединить просто - берешь данные и вставляешь в ячейки :)
Спасибо что отозвались.
Ну в ручную это понятно что можно. Я просто хотел что б была какая нибудь связь, которая в случае изменений в базе, автоматически эти изменения отображало на виджите. Или если не пользоваться средствами pyqt для работы с базой, то нужно будет в ручную за этими изменениями следить?
dartNNN
Май 21, 2010 06:27:35
А зачем QTableWidget, если он оставлен только ради совместимости, а работать надо с QTableView. Там все просто: есть еще QSqlTableModel, вот в нем задаются некоторые параметры, а потом он подключается к QTableView через QTableView.setModel(self ,model).
По-моему очень просто все и работать будет так как и хочет TC
ussr-->
Май 21, 2010 06:30:07
ussr-->
Upasaranax
QTableWidget попроще будет или QListWidget, что тебе логически больше подходит. Соединить просто - берешь данные и вставляешь в ячейки :)
Спасибо что отозвались.
Ну в ручную это понятно что можно. Я просто хотел что б была какая нибудь связь, которая в случае изменений в базе, автоматически эти изменения отображало на виджите. Или если не пользоваться средствами pyqt для работы с базой, то нужно будет в ручную за этими изменениями следить?
Сейчас попробовал QTableWidget. Удобная вещь. Спасибо за совет! Только вот вопрос такой. А нет ли какого нибудь ограничения для них? Ну QTableWidget может на пример,нормально работать с не более 1000 записей в базе а дальше либо теряет эффективность, либо вообще не работает.
И все же хотелось узнать. Если ли способ эффективней чем обновление путем удаление всех записей и нового их добавления?
ussr-->
Май 21, 2010 07:24:59
dartNNN
А зачем QTableWidget, если он оставлен только ради совместимости, а работать надо с QTableView. Там все просто: есть еще QSqlTableModel, вот в нем задаются некоторые параметры, а потом он подключается к QTableView через QTableView.setModel(self ,model).
По-моему очень просто все и работать будет так как и хочет TC
Да. Это то что нужно! Спасибо вам большое!
Только вот один вопрос. Если не тяжело, то ответь пожалуйста. В инете натыкался на довольно частый случий, когда создавали свою модель, путем наследования от QSqlTableModel. В каких случаях это вообще необходимо и что это дает? Буду признателен если просвятите:)
dartNNN
Май 22, 2010 11:38:44
Ну сам я такое не делал, обходился стандартом. Но в общем случае это нужно, когда стандартного функционала не хватает. В примерах PyQt, например, переопределяется QSqlQueryModel, чтобы сделать только 1 и 2 столбцы редактируемыми, также там обрабатываются данные из базы, прежде чем передать их в QTableView. Т.к. QSqlTableModel лежит между базой и QTableView, то это самое то место для обработки данных перед выводом в QTableView
ussr-->
Май 23, 2010 15:07:29
dartNNN
Ну сам я такое не делал, обходился стандартом. Но в общем случае это нужно, когда стандартного функционала не хватает. В примерах PyQt, например, переопределяется QSqlQueryModel, чтобы сделать только 1 и 2 столбцы редактируемыми, также там обрабатываются данные из базы, прежде чем передать их в QTableView. Т.к. QSqlTableModel лежит между базой и QTableView, то это самое то место для обработки данных перед выводом в QTableView
Спасибо большое за разъяснение! Мне просто нужно было отображать не одну таблицу (как в QSqlTableModel предлагают), а объединение. Вот уже и начал думать, что для этого придется писать свою модель. Но потом нашел QSqlQueryModel и понял, что можно обойтись. Но тогда стало интересно… Для чего вообще нужна своя модель:)
В общем… Еще раз спасибо за то что отозвались и объяснили!)