Python 从sqlite3填充组合框可编辑用户名和行编辑密码

Python 从sqlite3填充组合框可编辑用户名和行编辑密码,python,python-3.x,sqlite,pyqt,pyqt5,Python,Python 3.x,Sqlite,Pyqt,Pyqt5,我有1个combobox可编辑用户名和1行编辑密码,我想将用户列表从数据库sqlite3加载到combobox。加载列表后,我希望对itemlist组合框执行操作,从数据库中获取当前选定用户的密码 pyqt5应用程序 表列 表格记录 ######Combo Box 2 - PM's self.groupBox_2 = QtWidgets.QGroupBox(self.tab) self.groupBox_2.setGeometry(QtCore.QRect(1

我有1个combobox可编辑用户名和1行编辑密码,我想将用户列表从数据库sqlite3加载到combobox。加载列表后,我希望对itemlist组合框执行操作,从数据库中获取当前选定用户的密码

pyqt5应用程序

表列

表格记录

######Combo Box 2 - PM's
        self.groupBox_2 = QtWidgets.QGroupBox(self.tab)
        self.groupBox_2.setGeometry(QtCore.QRect(10, 140, 191, 51))
        self.groupBox_2.setObjectName("groupBox_2")
        self.comboBox_3 = QtWidgets.QComboBox(self.groupBox_2)
        self.comboBox_3.setGeometry(QtCore.QRect(10, 20, 171, 22))
        self.comboBox_3.setObjectName("comboBox_3")
        self.comboBox_3.addItems(self.pm_Combo)

def pm_Combo(self):
        conn = sqlite3.connect('testdb.db')
        c = conn.cursor()
        c.execute("SELECT DISTINCT projectmanager FROM testtable2")
        pmList = c.fetchall()
        conn.commit()
        conn.close()


假设该表被称为“用户”,那么当QComboBox的currentIndex更改时,您可以使用userData保存信息并在QLineEdit中进行设置:

import os
import sqlite3
import sys

from PyQt5 import QtWidgets, QtSql


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.username_combo = QtWidgets.QComboBox()
        self.password_lineedit = QtWidgets.QLineEdit()

        button_login = QtWidgets.QPushButton(self.tr("Login"))

        lay = QtWidgets.QFormLayout(self)
        lay.addRow(self.tr("Username:"), self.username_combo)
        lay.addRow(self.tr("Password:"), self.password_lineedit)
        lay.addRow(button_login)

        self.username_combo.currentIndexChanged.connect(self.update_password)

        self.load_usernames()

    def load_usernames(self):
        current_dir = os.path.dirname(os.path.realpath(__file__))
        db_path = os.path.join(current_dir, "testdb.db")

        self.username_combo.clear()
        with sqlite3.connect(db_path) as conn:
            cursor = conn.execute("SELECT DISTINCT username, password FROM User")
            for result in cursor.fetchall():
                username, password = result
                self.username_combo.addItem(username, password)

    def update_password(self):
        self.password_lineedit.setText(self.username_combo.currentData())


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
另一种可能的解决方案是将QSqlQueryModel与QDataWidgetMapper一起使用:

导入操作系统
导入系统
从PyQt5导入QtWidgets、QtSql
def create_connection():
current_dir=os.path.dirname(os.path.realpath(uu文件_uu))
db\u path=os.path.join(当前目录,“testdb.db”)
db=QtSql.QSqlDatabase.addDatabase(“QSQLITE”)
db.setDatabaseName(db_路径)
如果不是db.open():
打印(“错误:{}”。格式(db.lastError().text())
返回错误
返回真值
类小部件(qtwidts.QWidget):
def uuu init uuu(self,parent=None):
super()。\uuuu init\uuuu(父级)
self.username\u combo=qtwidts.QComboBox()
self.password\u lineedit=QtWidgets.QLineEdit()
button\u login=qtwidts.QPushButton(self.tr(“login”))
lay=qtwidts.QFormLayout(自)
lay.addRow(self.tr(“用户名”)、self.Username\u组合)
lay.addRow(self.tr(“密码”)、self.Password\u lineedit)
lay.addRow(按钮\登录)
self.load_data()
def加载_数据(自身):
self.model=QtSql.QSqlQueryModel()
self.model.setQuery(““”从用户“”中选择不同的用户名、密码”)
self.mapper=QtWidgets.QDataWidgetMapper()
self.mapper.setModel(self.model)
self.mapper.addMapping(self.password\u lineedit,1)
self.username\u combo.currentIndexChanged.connect(self.mapper.setCurrentIndex)
self.username\u combo.setModel(self.model)
如果名称=“\uuuuu main\uuuuuuuu”:
app=qtwidts.QApplication(sys.argv)
如果没有,请创建_连接():
系统出口(-1)
w=Widget()
w、 show()
sys.exit(app.exec_())