Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Заполнить QComboBox данными из SQL запроса используя PyQT [RSS Feed]

#1 Март 23, 2010 13:12:54

Bujhm666
От:
Зарегистрирован: 2010-03-23
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Здравствуйте, возможно пишу не в ту ветку, т.к мой вопрос относится и к GUI и к базам данных и вдобавок я новичок, потому и решил написать в раздел для новичков. Подскажите пожалуйста как заполнить ComboBox данными из SQL запроса используя PyQT. По заполнению простым списком значений примеров много, а вот как запросом не пойму. И сразу если можно, как связать два комбобокса, что бы данные во втором изменялись на основании первого. С SQL проблем нет, а вот с Python и PyQT пока большие. Если можно небольшой пример или ссылку.

Заранее спасибо.



Офлайн

#2 Март 23, 2010 14:14:02

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

По первому вопросу:
Ну тут, как я понимаю особых хитростей нет. Просто преобразовать данные из запроса в список значений, а дальше по известным примерам. Что используете для работы с базой? (только не говорите что QtSql:)).

По второму вопросу:
Хотелось бы знать что именно вам нужно, но пока потелепатирую:)
В QComboBox есть сигнал currentIndexChanged(int), вот его значит подсоединяем к слоту (функции), которая обработает эту смену так, как вам это нужно.



Офлайн

#3 Март 23, 2010 17:52:41

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Bujhm666
Здравствуйте, возможно пишу не в ту ветку, т.к мой вопрос относится и к GUI и к базам данных и вдобавок я новичок, потому и решил написать в раздел для новичков. Подскажите пожалуйста как заполнить ComboBox данными из SQL запроса используя PyQT. По заполнению простым списком значений примеров много, а вот как запросом не пойму. И сразу если можно, как связать два комбобокса, что бы данные во втором изменялись на основании первого. С SQL проблем нет, а вот с Python и PyQT пока большие. Если можно небольшой пример или ссылку.

Заранее спасибо.
Если использовать Qtsql то я замутил вот так может тупо и коряво зато пашет))):
        query2=QtSql.QSqlQuery()
query2.exec("SELECT * FROM avto")
while query2.next():
#тут короче добавляю значения которые ты хочешь добавить в комбобокс в моем случае получается все значения из первого столбца таблицы авто
self.my_mainwindow.combobox_avto.addItem(str(query2.value(1)))
А вообще посмотри sqlite там это проще и понятнее:
http://www.intuit.ru/department/pl/python/10/python_10.htm
P.S. dartNN посмотри плиз мой вопрос по старой ссылке нашего обсуждения тоже по combobox
ссылка:
http://www.python.su/forum/viewtopic.php?id=6734



Отредактировано (Март 23, 2010 22:38:38)

Офлайн

#4 Март 24, 2010 07:37:48

Bujhm666
От:
Зарегистрирован: 2010-03-23
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Вот простенький пример, форма с одним комбобоксом, который заполняется из SQLite.
Строки в комбик добавляются согласно количеству записей таблицы, но вместо нормального текста в них отображается - <PyQt4.QtCore.QVariant object at 0xb77021dc>.

# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, QtSql
import connection

class ComboTest(QtGui.QWidget):
def __init__(self,*args):
QtGui.QWidget.__init__(self,*args)
boxlay = QtGui.QHBoxLayout(self)
frame = QtGui.QFrame(self) # Фрейм
frame.setFrameShape(QtGui.QFrame.StyledPanel)
frame.setFrameShadow(QtGui.QFrame.Raised)
gridlay = QtGui.QGridLayout(frame) # Менеджер размещения элементов во фрейме
label1 = QtGui.QLabel(u"Offices:",frame) # Текстовая метка.
gridlay.addWidget(label1,0,0)
combo1 = QtGui.QComboBox(frame) # Поле ввода с раскрывающимся списком.
combo1.setEditable(True)
gridlay.addWidget(combo1,0,1)
boxlay.addWidget(frame)

query1=QtSql.QSqlQuery()
query1.exec_("select id, location from offices")
while query1.next():
combo1.addItem(str(query1.value(1)))

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
if not connection.createConnection():
sys.exit(1)

ct = ComboTest()
ct.show()
sys.exit(app.exec_())
Пробую совсем простую конструкцию:
#!/bin/env python

from PyQt4 import QtSql, QtGui

def createConnection():
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(":memory:")
if not db.open():
QtGui.QMessageBox.critical(None, QtGui.qApp.tr("Cannot open database"),
QtGui.qApp.tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information "
"how to build it.\n\n"
"Click Cancel to exit."),
QtGui.QMessageBox.Cancel)
return False

query = QtSql.QSqlQuery()

query.exec_("create table person(id int primary key, idoffices int,"
"firstname varchar(20), lastname varchar(20))")
query.exec_("insert into person values(101, 0, 'Danny', 'Young')")
query.exec_("insert into person values(102, 0, 'Christine', 'Holand')")
query.exec_("insert into person values(103, 1, 'Lars', 'Gordon')")
query.exec_("insert into person values(104, 2, 'Roberto', 'Robitaille')")
query.exec_("insert into person values(105, 2, 'Maria', 'Papadopoulos')")

query.exec_("select id, location from offices")
query.next()
print query.value(1)

createConnection()
И все равно в консоли наблюдаю вместо нормальных данных столбца то же:
<PyQt4.QtCore.QVariant object at 0xb77021dc>

Подскажите, что не так, измучился.



Отредактировано (Март 24, 2010 07:38:46)

Офлайн

#5 Март 24, 2010 07:58:34

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Ну тут важно понимать одну вещь: PyQt это привязка Qt к питону, поэтому оно выходит как нечто среднее между C и Python. А именно, в PyQt свои типы данных, с относительно четкой типизацией (по сравнению с питоном). Что мы имеем в данном случае: PyQt4.QtCore.QVariant - это тип Variant, и он (вот наглец) сам в строку не преобразуется! Поэтому надо писать

query.value(1).toString()



Офлайн

#6 Март 24, 2010 08:06:06

Bujhm666
От:
Зарегистрирован: 2010-03-23
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Огромное спасибо, заработало. И ведь я смотрел на этот toString, только так и не понял, куда его приспособить.



Офлайн

#7 Сен. 9, 2010 11:00:17

oshkera
От:
Зарегистрирован: 2010-09-09
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Помогите, пожалуйста, написать код для combobox если список взят их базы данных,ведь я -она.



Офлайн

#8 Сен. 9, 2010 12:20:48

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

oshkera
Помогите, пожалуйста, написать код для combobox если список взят их базы данных,ведь я -она.
Информация к размышлению



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Ноя. 17, 2010 19:28:11

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

Всем привет,
поделитесь работающим примером!
Спасибо.



Офлайн

#10 Ноя. 18, 2010 06:57:15

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Заполнить QComboBox данными из SQL запроса используя PyQT

dartNNN
Ну тут важно понимать одну вещь: PyQt это привязка Qt к питону, поэтому оно выходит как нечто среднее между C и Python. А именно, в PyQt свои типы данных, с относительно четкой типизацией (по сравнению с питоном). Что мы имеем в данном случае: PyQt4.QtCore.QVariant - это тип Variant, и он (вот наглец) сам в строку не преобразуется! Поэтому надо писать
Код:

query.value(1).toString()
У меня на питоне 2.5.4 такой код не обрабатывает символы кирилицы. Выходит сообщение об ошибке
Traceback (most recent call last):
File "c:\Python25\example\qt\zapchast\main.py", line 94, in add_zapis
self.refresh()
File "c:\Python25\example\qt\zapchast\main.py", line 69, in refresh
item1=QtGui.QTableWidgetItem(str(query.value(1).toString()))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
Как эту проблему решить?



Отредактировано (Ноя. 18, 2010 06:59:35)

Офлайн

  • Начало
  • » GUI
  • » Заполнить QComboBox данными из SQL запроса используя PyQT[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version