Уведомления

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

#1 Ноя. 18, 2010 08:54:04

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

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

Рабочий код для питона 2.5.4:

#!usr/bin/python
#-*- coding: utf-8 -*-
from PyQt4 import QtGui
from PyQt4 import QtSql
from PyQt4 import QtCore
import sys

def create_connection():
db=QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(":memory:")
if not db.open():
my_message=My_Messqge()
my_message.show()
my_message.exec_()
return False

query=QtSql.QSqlQuery()
query.exec_("CREATE TABLE IF NOT EXISTS zapchasty(id INTEGER PRIMARY KEY AUTOINCREMENT, naimenovanie VARCHAR(50), kolichestvo INTEGER, price FLOAT)")
return True

class My_Gui(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.resize(520,300)

self.table=QtGui.QTableWidget(self)
self.table.resize(417,200)
self.table.setColumnCount(4)
self.table.setHorizontalHeaderItem(0,QtGui.QTableWidgetItem(u"№"))
self.table.setHorizontalHeaderItem(1,QtGui.QTableWidgetItem(u"Наименование"))
self.table.setHorizontalHeaderItem(2,QtGui.QTableWidgetItem(u"Количество"))
self.table.setHorizontalHeaderItem(3,QtGui.QTableWidgetItem(u"Цена"))
self.table.setColumnHidden(0,True)

self.button_add=QtGui.QPushButton(u"Добавить",self)
self.button_delete=QtGui.QPushButton(u"Удалить",self)
self.button_add.setIcon(QtGui.QIcon("logo/add2.png"))
self.buttons_wdget=QtGui.QWidget(self)
self.buttons_wdget.setGeometry(410,10,100,100)
self.buttons_kompanovka=QtGui.QVBoxLayout(self.buttons_wdget)
self.buttons_kompanovka.addWidget(self.button_add)
self.buttons_kompanovka.addWidget(self.button_delete)

self.button_add.clicked.connect(self.zapusk_form2)
self.button_delete.clicked.connect(self.del_zapis)

def zapusk_form2(self):
self.my_form2=My_Gui2()
self.my_form2.show()
self.my_form2.button_addd.clicked.connect(self.add_zapis)

def refresh(self):
n=self.table.rowCount()
i=0
while i<n:
if i<n:
self.table.removeRow(0)
i+=1
continue
else:
break

query=QtSql.QSqlQuery()
query.exec_("SELECT * FROM zapchasty")
while query.next():
item0=QtGui.QTableWidgetItem(query.value(0).toString())
item0.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
item1=QtGui.QTableWidgetItem(query.value(1).toString())
item1.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
item2=QtGui.QTableWidgetItem(query.value(2).toString())
item2.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
item3=QtGui.QTableWidgetItem(query.value(3).toString())
item3.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)

self.table.insertRow(0)
self.table.setItem(0,0,item0)
self.table.setItem(0,1,item1)
self.table.setItem(0,2,item2)
self.table.setItem(0,3,item3)

def add_zapis(self):
a=self.my_form2.edit_naimenovanie.text()
b=self.my_form2.edit_kolichestvo.text()
c=self.my_form2.edit_price.text()

query=QtSql.QSqlQuery()
query.prepare("INSERT INTO zapchasty(naimenovanie,kolichestvo,price) VALUES(:naimen,:kolich,:pr)")
query.bindValue(":naimen",a)
query.bindValue(":kolich",b)
query.bindValue(":pr",c)
query.exec_()

self.refresh()
self.my_form2.hide()

def del_zapis(self):
if self.table.currentIndex().row()>=0:
query=QtSql.QSqlQuery()
query.prepare("DELETE FROM zapchasty WHERE id=:id")
query.bindValue("id",self.table.item(self.table.currentIndex().row(),0).text())
query.exec_()

self.refresh()
else:
pass

class My_Gui2(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)

self.resize(300,150)
self.setWindowModality(QtCore.Qt.ApplicationModal)
self.all_widget=QtGui.QWidget(self)
self.label_naimenovanie=QtGui.QLabel(u"Наименование")
self.edit_naimenovanie=QtGui.QLineEdit()
self.label_kolichestvo=QtGui.QLabel(u"Количество")
self.edit_kolichestvo=QtGui.QLineEdit()
self.label_price=QtGui.QLabel(u"Цена")
self.edit_price=QtGui.QLineEdit()
self.kompanovka=QtGui.QVBoxLayout(self.all_widget)
self.kompanovka.addWidget(self.label_naimenovanie)
self.kompanovka.addWidget(self.edit_naimenovanie)
self.kompanovka.addWidget(self.label_kolichestvo)
self.kompanovka.addWidget(self.edit_kolichestvo)
self.kompanovka.addWidget(self.label_price)
self.kompanovka.addWidget(self.edit_price)

self.button_addd=QtGui.QPushButton(u"Добавить",self)
self.button_addd.setGeometry(200,10,100,50)

class My_Messqge(QtGui.QMessageBox):
def __init__(self):
QtGui.QMessageBox.__init__(self)

self.setIcon(QtGui.QMessageBox.Warning)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowTitleHint)
self.setWindowTitle(u"Ошибка открытия Базы Данных")
self.setText(u"Неудалось открыть Базу Данных!Нажмите кнопку Дальше чтобы продолжить работу с приложением.")
self.addButton(u"Дальше", QtGui.QMessageBox.AcceptRole)

class My_Messqge2(QtGui.QMessageBox):
def __init__(self):
QtGui.QMessageBox.__init__(self)

self.setIcon(QtGui.QMessageBox.Critical)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowTitleHint)
self.setWindowTitle(u"Ошибка соединения с Базой Данных")
self.setText(u"Неудалось установить соединение с Базой Данных!Нажмите кнопку Выход чтобы завершить работу приложения.")
self.addButton(u"Выход",QtGui.QMessageBox.AcceptRole)

app=QtGui.QApplication(sys.argv)
if not create_connection():
my_message2=My_Messqge2()
my_message2.show()
my_message2.exec_()
else:
my_forma1=My_Gui()
my_forma1.show()
app.exec_()



Офлайн

#2 Ноя. 13, 2011 19:09:17

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

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

Доброго всем.
Есть функция

def list_users1(self):
self.fr=QtGui.QWidget(self)
conn = mdb.connect('localhost', 'root', '', 'test',use_unicode=True, charset='cp1251');
cursor = conn.cursor()
conn.set_character_set('cp1251')
cursor.execute('SET NAMES cp1251')
cursor.execute('SET CHARACTER SET cp1251')
cursor.execute('SET character_set_connection=cp1251')
cursor.execute('select tarname from tarifs ')
combo = QtGui.QComboBox(self.fr)
for row in cursor.fetchall():
combo.addItem(str(row[0].encode('cp1251')))
conn.commit()
cursor.close ()
conn.close()

self.setCentralWidget(self.fr)
Combobox не выводит кириллицу.Что еще тут упустил?Другая функция с такими параметрами соединения с базой,выводит в таблицу данные корректно.Спасибо.



Отредактировано (Ноя. 13, 2011 19:12:33)

Офлайн

#3 Ноя. 14, 2011 18:48:13

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

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

Хоспади! Ну што за люди? Вы специально именно в этой ветке спрашиваете? Неужели религия не позволяет создать отдельную тему?



Офлайн

#4 Ноя. 17, 2011 10:17:50

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

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

Хоспаде!Это работающий пример,на вопрос ТС.С этой же проблемой столкнуться другие.Или нужно одно и тоже дважды выкладывать в другой теме?



Офлайн

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

Board footer

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

Powered by DjangoBB

Lo-Fi Version