我有一个combobox可编辑的用户名和一行编辑密码我想加载用户列表从数据库sqlite3到combobox。加载列表后,我想行动的项目列表combobox获得密码当前选定用户从数据库。 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()
问题来源StackOverflow 地址:/questions/59386218/populate-combobox-editable-username-and-line-edit-password-from-sqlite3
假设表名为“user”,那么您可以使用userData保存信息,并在QComboBox的currentIndex更改时在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:
import os
import sys
from PyQt5 import QtWidgets, QtSql
def create_connection():
current_dir = os.path.dirname(os.path.realpath(__file__))
db_path = os.path.join(current_dir, "testdb.db")
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName(db_path)
if not db.open():
print("error: {}".format(db.lastError().text()))
return False
return True
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.load_data()
def load_data(self):
self.model = QtSql.QSqlQueryModel()
self.model.setQuery("""SELECT DISTINCT username, password FROM User""")
self.mapper = QtWidgets.QDataWidgetMapper()
self.mapper.setModel(self.model)
self.mapper.addMapping(self.password_lineedit, 1)
self.username_combo.currentIndexChanged.connect(self.mapper.setCurrentIndex)
self.username_combo.setModel(self.model)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
if not create_connection():
sys.exit(-1)
w = Widget()
w.show()
sys.exit(app.exec_())
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。