日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
PythonPyQt實(shí)現(xiàn)數(shù)據(jù)庫(kù)綁定功能(pyqt綁定數(shù)據(jù)庫(kù))

在企業(yè)信息化應(yīng)用中,數(shù)據(jù)庫(kù)的使用是不可避免的需求。而在Python中,使用PyQt框架可以很方便地實(shí)現(xiàn)數(shù)據(jù)庫(kù)綁定功能,簡(jiǎn)化了開發(fā)者的工作,提高開發(fā)效率。本文將介紹的實(shí)現(xiàn)方法。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供??谄髽I(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為海口眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

一、Python PyQt與數(shù)據(jù)庫(kù)

Python PyQt是Python語言的一個(gè)GUI編程框架,通過與數(shù)據(jù)庫(kù)的結(jié)合,能夠?qū)崿F(xiàn)靈活快速的數(shù)據(jù)管理操作。PyQt可以操作絕大多數(shù)的數(shù)據(jù)庫(kù),包括SQLite、MySQL、Oracle等等。

通過使用PyQt實(shí)現(xiàn)數(shù)據(jù)庫(kù)綁定功能,可以方便地將數(shù)據(jù)表或視圖與控件進(jìn)行綁定,實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)更新與顯示,這大大減輕了程序員的負(fù)擔(dān),提高了開發(fā)效率。

二、PyQt與SQLite數(shù)據(jù)庫(kù)的綁定

在實(shí)現(xiàn)數(shù)據(jù)庫(kù)綁定功能時(shí),我們首先需要選擇合適的數(shù)據(jù)庫(kù)。在本文中,我們選擇SQLite,這是一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù),非常適合小型項(xiàng)目的使用。

1. PySQLite模塊的安裝

首先需要安裝PySQLite模塊,這個(gè)模塊提供了Python對(duì)SQLite數(shù)據(jù)庫(kù)的支持??梢酝ㄟ^pip工具進(jìn)行安裝:

“`python

pip install pysqlite3

“`

安裝完成后,我們就可以開始使用這個(gè)模塊了。

2. 建立SQLite數(shù)據(jù)庫(kù)

我們需要在SQLite數(shù)據(jù)庫(kù)中創(chuàng)建一張表,來存儲(chǔ)將要綁定的數(shù)據(jù)。以員工信息表為例,表結(jié)構(gòu)如下:

“`SQL

CREATE TABLE employee (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name VARCHAR(20) NOT NULL,

gender VARCHAR(2) NOT NULL,

age INTEGER DEFAULT 0,

department VARCHAR(50) NOT NULL

)

“`

這個(gè)表包含了員工的基本信息,包括編號(hào)、姓名、性別、年齡和所在部門。

3. 建立PyQt窗口

我們需要?jiǎng)?chuàng)建一個(gè)PyQt窗口,用來顯示員工信息表中的數(shù)據(jù)。這個(gè)窗口需要包含一個(gè)QTableView控件,用來顯示表格數(shù)據(jù)。

“`python

import sys

from PyQt5.QtWidgets import QApplication,QMnWindow,QTableView

from PyQt5.QtSql import QSqlDatabase,QSqlQuery

class MnWindow(QMnWindow):

def __init__(self,parent=None):

super(MnWindow,self).__init__(parent)

self.setWindowTitle(‘Employee Information’)

self.resize(480,280)

self.tableView=QTableView(self)

self.tableView.setGeometry(20,20,440,240)

self.tableView.setSortingEnabled(True)

self.db=QSqlDatabase.addDatabase(‘QSQLITE’)

self.db.setDatabaseName(’employee.db’)

if not self.db.open():

print(self.db.lastError().text())

sys.exit(1)

self.model=QtSql.QSqlTableModel(self,db)

self.model.setTable(’employee’)

self.model.sort(0,QtCore.Qt.DescendingOrder) # 按第0列降序排列

self.model.select()

self.tableView.setModel(self.model)

self.tableView.resizeColumnsToContents() # 自適應(yīng)列寬

if __name__ == ‘__mn__’:

app=QApplication(sys.argv)

win=MnWindow()

win.show()

sys.exit(app.exec_())

“`

在上面的代碼中,我們創(chuàng)建了一個(gè)QMnWindow窗口,包含了一個(gè)QTableView控件。同時(shí),我們通過QSqlDatabase.addDatabase(‘QSQLITE’)方法創(chuàng)建了一個(gè)SQLite數(shù)據(jù)庫(kù),并連接到了名為employee.db的數(shù)據(jù)庫(kù)文件。在連接成功后,我們可以通過QSqlQuery對(duì)象進(jìn)行查詢和更新數(shù)據(jù)庫(kù)。這里的QSqlTableModel控件可以方便地與數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行綁定。

我們將表格設(shè)置為自適應(yīng)列寬。這樣,每個(gè)字段的寬度將調(diào)整得足夠?qū)?,可以容納數(shù)據(jù),增加用戶體驗(yàn)。

三、綁定控件與數(shù)據(jù)庫(kù)

在上一節(jié)中,我們已經(jīng)實(shí)現(xiàn)了創(chuàng)建PyQt窗口和連接SQLite數(shù)據(jù)庫(kù)的功能。下一步是實(shí)現(xiàn)控件與數(shù)據(jù)庫(kù)的綁定,以自動(dòng)更新數(shù)據(jù)。

1. 實(shí)現(xiàn)數(shù)據(jù)插入

我們可以使用QSqlQuery對(duì)象插入新的員工記錄。當(dāng)我們單擊插入按鈕時(shí),一個(gè)新的員工記錄將入到數(shù)據(jù)庫(kù)中。同時(shí),表格中的數(shù)據(jù)也將刷新。

“`python

import sys

from PyQt5.QtWidgets import QApplication,QMnWindow,QWidget,QHBoxLayout,QVBoxLayout,QTableView,QLineEdit,QPushButton

from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel

class MnWindow(QMnWindow):

def __init__(self,parent=None):

super(MnWindow,self).__init__(parent)

self.setWindowTitle(‘Employee Information’)

self.resize(480,280)

centralWidget=QWidget(self)

self.setCentralWidget(centralWidget)

self.tableView=QTableView(self)

self.tableView.setSortingEnabled(True)

self.db=QSqlDatabase.addDatabase(‘QSQLITE’)

self.db.setDatabaseName(’employee.db’)

if not self.db.open():

print(self.db.lastError().text())

sys.exit(1)

self.model=QSqlTableModel(self,db)

self.model.setTable(’employee’)

self.model.sort(0,QtCore.Qt.DescendingOrder)

self.model.select()

self.tableView.setModel(self.model)

self.tableView.resizeColumnsToContents()

self.nameEdit=QLineEdit(self)

self.genderEdit=QLineEdit(self)

self.ageEdit=QLineEdit(self)

self.departmentEdit=QLineEdit(self)

nameLabel=QLabel(‘Name’,self)

genderLabel=QLabel(‘Gender’,self)

ageLabel=QLabel(‘Age’,self)

departmentLabel=QLabel(‘Department’,self)

insertButton=QPushButton(‘Insert’,self)

insertButton.clicked.connect(self.insertRecord)

hlayout=QHBoxLayout()

vlayout=QVBoxLayout(centralWidget)

vlayout.addWidget(self.tableView)

vlayout.addLayout(hlayout)

hlayout.addWidget(nameLabel)

hlayout.addWidget(self.nameEdit)

hlayout.addWidget(genderLabel)

hlayout.addWidget(self.genderEdit)

hlayout.addWidget(ageLabel)

hlayout.addWidget(self.ageEdit)

hlayout.addWidget(departmentLabel)

hlayout.addWidget(self.departmentEdit)

hlayout.addWidget(insertButton)

def insertRecord(self):

query=QSqlQuery(db)

query.prepare(‘INSERT INTO employee (name,gender,age,department) VALUES (?,?,?,?)’)

query.addBindValue(self.nameEdit.text())

query.addBindValue(self.genderEdit.text())

query.addBindValue(int(self.ageEdit.text()))

query.addBindValue(self.departmentEdit.text())

if not query.exec():

print(query.lastError().text())

self.model.select()

if __name__ == ‘__mn__’:

app=QApplication(sys.argv)

win=MnWindow()

win.show()

sys.exit(app.exec_())

“`

在上面的代碼中,我們創(chuàng)建了一個(gè)新的QWidget,并在其中添加了四個(gè)QLineEdit控件(分別用于輸入員工姓名、性別、年齡和所屬部門)、一個(gè)QPushButton控件(用于插入新的員工記錄)。通過調(diào)用insertRecord函數(shù),在將所有輸入數(shù)據(jù)綁定到QSqlQuery對(duì)象后,將新條目插入到數(shù)據(jù)庫(kù)中。

2. 實(shí)現(xiàn)數(shù)據(jù)刪除

當(dāng)我們單擊刪除按鈕時(shí),選擇的員工記錄將被刪除。同時(shí),表格中的數(shù)據(jù)也將刷新。

“`python

import sys

from PyQt5.QtWidgets import QApplication,QMnWindow,QWidget,QHBoxLayout,QVBoxLayout,QTableView,QLineEdit,QPushButton

from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel

class MnWindow(QMnWindow):

def __init__(self,parent=None):

super(MnWindow,self).__init__(parent)

self.setWindowTitle(‘Employee Information’)

self.resize(480,280)

centralWidget=QWidget(self)

self.setCentralWidget(centralWidget)

self.tableView=QTableView(self)

self.tableView.setSortingEnabled(True)

self.db=QSqlDatabase.addDatabase(‘QSQLITE’)

self.db.setDatabaseName(’employee.db’)

if not self.db.open():

print(self.db.lastError().text())

sys.exit(1)

self.model=QSqlTableModel(self,db)

self.model.setTable(’employee’)

self.model.sort(0,QtCore.Qt.DescendingOrder)

self.model.select()

self.tableView.setModel(self.model)

self.tableView.resizeColumnsToContents()

self.nameEdit=QLineEdit(self)

self.genderEdit=QLineEdit(self)

self.ageEdit=QLineEdit(self)

self.departmentEdit=QLineEdit(self)

nameLabel=QLabel(‘Name’,self)

genderLabel=QLabel(‘Gender’,self)

ageLabel=QLabel(‘Age’,self)

departmentLabel=QLabel(‘Department’,self)

insertButton=QPushButton(‘Insert’,self)

insertButton.clicked.connect(self.insertRecord)

deleteButton=QPushButton(‘Delete’,self)

deleteButton.clicked.connect(self.deleteRecord)

hlayout=QHBoxLayout()

vlayout=QVBoxLayout(centralWidget)

vlayout.addWidget(self.tableView)

vlayout.addLayout(hlayout)

hlayout.addWidget(nameLabel)

hlayout.addWidget(self.nameEdit)

hlayout.addWidget(genderLabel)

hlayout.addWidget(self.genderEdit)

hlayout.addWidget(ageLabel)

hlayout.addWidget(self.ageEdit)

hlayout.addWidget(departmentLabel)

hlayout.addWidget(self.departmentEdit)

hlayout.addWidget(insertButton)

hlayout.addWidget(deleteButton)

def insertRecord(self):

query=QSqlQuery(db)

query.prepare(‘INSERT INTO employee (name,gender,age,department) VALUES (?,?,?,?)’)

query.addBindValue(self.nameEdit.text())

query.addBindValue(self.genderEdit.text())

query.addBindValue(int(self.ageEdit.text()))

query.addBindValue(self.departmentEdit.text())

if not query.exec():

print(query.lastError().text())

self.model.select()

def deleteRecord(self):

selected=self.tableView.selectedIndexes()

if len(selected)!=1:

return

row=selected[0].row()

self.model.removeRows(row,1)

if __name__ == ‘__mn__’:

app=QApplication(sys.argv)

win=MnWindow()

win.show()

sys.exit(app.exec_())

“`

在上面的代碼中,我們創(chuàng)建了一個(gè)新的QPushButton控件,用于從數(shù)據(jù)庫(kù)中刪除所選員工記錄。我們使用QTableView.selectedIndexes()方法獲取被選中的數(shù)據(jù)行,然后調(diào)用QSqlTableModel.removeRows()方法刪除該記錄。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220

用pyqt做好了前端,想用django做服務(wù)器,想問一下大概怎么搭建呢?

一般客戶端(也就是你說的前段)跟服務(wù)器端(你準(zhǔn)備使用Django)都是通過 HTTP 協(xié)議交換信息的(除純塵非有特別的需求,才會(huì)使用別的或者定制協(xié)議)。

在 客戶端(PyQT)中,你可以安裝 Requests 庫(kù),它可以幫助你發(fā)送 HTTP 請(qǐng)求給服務(wù)器端,

在 Django 中你可以使用燃塌 Django REST Framework

網(wǎng)頁鏈接

處理 客戶端做段禪的

HTTP請(qǐng)求

pyqt4pyqt5哪個(gè)好用_pyqt5使用

PyQt5不兼容PyQt4(盡管經(jīng)驗(yàn)表明,將PyQt4的應(yīng)用程序移植到PyQt5難度不是很大)。本節(jié)描述了兩者之間的主要差異。

支持Python的版本

不支持較早的Python2.6之前的版本┊。

推薦使用特性

PyQt5不支持任何被標(biāo)記為過時(shí)的或廢棄的QTV5.0的API。然而,還是可能有一些“漏網(wǎng)之魚”。如果將來發(fā)現(xiàn)了,這些錯(cuò)誤將被刪除。

多個(gè)API

PyQt4支持許多不同的API版本(QString,QVariant等)。QVariant

PyQt5只支持V2版本的API。一個(gè)例外:對(duì)于QVariant,去除了。

老式的信號(hào)和槽

PyQt4的舊式的信號(hào)和槽不再被支持。因此以下用法在PyQt5中已經(jīng)不能使用:

QObject.connect()

QObject.emit()

SIGNAL()

SLOT()

所有那些含有參數(shù),并且對(duì)返回結(jié)果調(diào)用SIGNAL()或SLOT()的方法不再被支持。綁定信號(hào)與調(diào)用函數(shù)總是等效的。

此外,另一個(gè)差異是增加了下面的函數(shù):

disconnect()斷開所有對(duì)QObject實(shí)例的連接,不需要參數(shù)。

新風(fēng)格的信號(hào)和槽

QT實(shí)現(xiàn)的信號(hào)與一個(gè)可選的參數(shù)作為兩個(gè)獨(dú)立的信號(hào),一個(gè)與論點(diǎn)和一個(gè)沒有它。PyQt4暴露這兩允許你連接到他們每個(gè)。然而,當(dāng)發(fā)射信號(hào),你必須使用適當(dāng)?shù)膮?shù)發(fā)出的信號(hào)數(shù)。

PyQt5暴露唯一的信號(hào)在所有指定參數(shù)。然而它允許任何可選參數(shù)被省略時(shí),發(fā)射信號(hào)。

不同于PyQt4,PyQt5支持在類中自定義屬性、信號(hào)與槽,即使這個(gè)類沒有繼承自QObject(比如:混合類)。

,QtScript和模塊

PyQt4的,QtScript和模塊不再支持。這些已被替換為PyQt5的QtQml和QtQuick模塊,PyQt5支持Python對(duì)象創(chuàng)建QML。

QtGui模塊

PyQt4的QtGui模塊,在PyQt5中被拆分成三個(gè)模塊:QtGui,和QtWidgets。

QtOpenGL模塊

只有QGlContext,QGlFormat和QGlWidget類被PyQt5支持。

QtWebKit模塊

PyQt4的QtWebKit模塊被分成PyQt5的QtWebKit和模塊。

pyqtconfig模塊

PyQt4的pyqtconfig模塊不支持。截面PyQt5擴(kuò)展的API介紹了支持PyQt5(例如提供第三方包qscintilla),要建立在PyQt5。

dbus.mainloop.qt模塊

PyQt4的dbus.mainloop.qt模塊稱為dbus.mainloop.PyQt5在PyQt5。這使得他們可以并排安裝。它們的功能是相同。

QDataStream

的reaint8(),readint8(),writeuint8()和writeint8()方法解釋值讀寫數(shù)字。PyQt4中它們被解釋為單個(gè)字符的字符串。

QFileDialog

PyQt4的QFileDialog類的(),()和()方法,在PyQt5中已更名為(),()和()。

而PyQt4原來的(),()和()不再被PyQt5支持。

QGraphicsItemAnimation

對(duì)廢棄的QGraphicsItemAnimation類的支持已被刪除。如果移植現(xiàn)有的PyQt4應(yīng)用程序,首先考慮用QPropertyAnimation替換。

QMatrix

對(duì)廢棄的QMatrix類的支持已被刪除。如果移植現(xiàn)有的PyQt4應(yīng)用程序,首先考慮用QTransform替換。

QPyTextObject

PyQt4的QPyTextObject,是作為一個(gè)無法定義一個(gè)繼承多個(gè)Qt類的Python類的變通的解決方法。PyQt5支持定義一個(gè)Python類,來繼承多個(gè)Qt類,只要他們已經(jīng)在C聲明為Q_DECLARE_INTERFACE。所以,QPyTextObject沒有在PyQt5中實(shí)現(xiàn)。

QSet

PyQt4,套裝在Python中的V2和V3一組Python列表實(shí)現(xiàn)。在PyQt5套裝總是作為一個(gè)集實(shí)現(xiàn)。

pyuic5

pyuic5不支持pyqt3——包裝國(guó)旗pyuic4。

pyr5

pyr5不支持-PY2和-PY3國(guó)旗pyr4。輸出pyr5兼容所有版本的PythonPython2.6入手。

多重繼承

不像PyQt4PyQt5類實(shí)現(xiàn)多重繼承,合作。在其他的話總是做PyQt5類下面的Python代碼在等效V3__init__方法(如kwds是一個(gè)未使用的關(guān)鍵詞參數(shù)字典):

super().__init__(**kwds)

這意味著,那些未使用的關(guān)鍵字的參數(shù)傳遞給__init__任何mixin類的方法。這些混合類必須合作,即必須如果他們有自己做一個(gè)類似的__init__實(shí)現(xiàn)。

當(dāng)使用多重繼承PyQt4是常見的__init__的超類方法明確,例如:

classMyQObject(QObject,MyMixin):

def__init__(self,parent,mixin_arg):

QObject.__init__(self,parent)

MyMixin.__init__(self,mixin_arg)

#Otherinitialisation…

在上述將導(dǎo)致PyQt5mymixin__init__。被稱為兩。而要實(shí)現(xiàn):

classMyQObject(QObject,MyMixin):

def__init__(self,**kwds):

super().__init__(**kwds)

#Otherinitialisation…

請(qǐng)注意,如果沒有其他的初始化做那么__init__方法不需要。

混合類應(yīng)實(shí)施如下:

classMyMixin:

def__init__(self,mixin_arg,**kwds):

super().__init__(**kwds)

#Otherinitialisation…

為什么用pyqt的不多?

大多是因?yàn)椴粫?huì)用,他們?cè)谧詫W(xué)的時(shí)候,找的資料教程一般都是手寫的代碼,等到他們學(xué)會(huì)用的時(shí)候,就知道是真的好用。

PyQt是一個(gè)創(chuàng)建GUI

應(yīng)用程序

的工具包。它是Python編程語言和Qt庫(kù)的成功融合。Qt庫(kù)是目前最強(qiáng)大的庫(kù)之一。PyQt是由Phil Thompson 開發(fā)。

PyQt實(shí)現(xiàn)了一個(gè)Python模塊集。它有超過300類,將近6000個(gè)函數(shù)和銀兄方法。它是一個(gè)多平臺(tái)的工具包,可以運(yùn)行在所有主要操作系統(tǒng)上,包括UNIX,Windows和Mac。

PyQt采用雙許可證,開發(fā)人員可以選擇GPL和商業(yè)許可。在此之前,GPL的版本只能用在Unix上,從PyQt的版本4開始,GPL許可證可用于所有支持的平臺(tái)。

因?yàn)榭捎玫念愑泻芏啵麄儽环殖蓭讉€(gè)模塊。 QtCore模塊包含核心的非GUI功能。該模塊用于時(shí)間、文件和目錄、各種

數(shù)據(jù)類型

、流、網(wǎng)址、MIME類型、線程或進(jìn)程。

QtGui模塊包含圖形組件和相關(guān)的類,例如按鈕、窗體、狀態(tài)欄、工具宏緩欄、滾動(dòng)條、位圖、顏色、字體等。

QtNetwork模塊包含了網(wǎng)絡(luò)編程的類,這些類允許編寫TCP/IP和UDP的客戶端和服務(wù)器,他們使網(wǎng)絡(luò)編程更簡(jiǎn)單,更輕便。

QtXml包含使用XML文件的類,這個(gè)模塊提供了SAX和DOM API的實(shí)現(xiàn)。QtSvg模塊提蔽搏模供顯示的SVG文件的類。可縮放矢量圖形(SVG)是一種用于描述二維圖形和圖形應(yīng)用程序的

XML語言

。

QtOpenGL模塊使用OpenGL庫(kù)渲染3D和2D圖形,該模塊能夠無縫集成Qt的GUI庫(kù)和OpenGL庫(kù)。QtSql模塊提供用于數(shù)據(jù)庫(kù)的類。

pyqt 綁定數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于pyqt 綁定數(shù)據(jù)庫(kù),Python PyQt實(shí)現(xiàn)數(shù)據(jù)庫(kù)綁定功能,用pyqt做好了前端,想用django做服務(wù)器,想問一下大概怎么搭建呢?,pyqt4pyqt5哪個(gè)好用_pyqt5使用,為什么用pyqt的不多?的信息別忘了在本站進(jìn)行查找喔。

成都創(chuàng)新互聯(lián)科技公司主營(yíng):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計(jì)、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊(cè)、網(wǎng)頁、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開發(fā)于一體。


文章名稱:PythonPyQt實(shí)現(xiàn)數(shù)據(jù)庫(kù)綁定功能(pyqt綁定數(shù)據(jù)庫(kù))
本文地址:http://www.dlmjj.cn/article/djpcshp.html