- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的表单,其中包含一个组合框和一个“保存”按钮。组合框的下拉列表显示:“选择颜色”、“红色”、“绿色”、“蓝色”。 “保存”按钮将用户从组合框中的选择保存到基础数据库表中,tbl_palette
.
我还有一个查找表,tlkp_colors
,其中包含颜色列表及其各自的 id。我使用这个查找表来填充组合框。
这个过于简化的示例的完整代码如下所示(可以按原样运行):
import sys
import os.path
import sqlite3
######### Qt DESIGNER AUTO GENERATED CODE ##########
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(407, 240)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(100, 60, 201, 22))
self.comboBox.setObjectName("comboBox")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(150, 130, 101, 28))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 407, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Save"))
######### END OF AUTO GENERATED CODE ###############
DIR_PATH = os.path.dirname(os.path.abspath(__file__))
DB_NAME = 'test.db'
target_db = os.path.join(DIR_PATH, DB_NAME)
class Database:
def __init__(self):
# create database 'test.db', add schema, then close it
cnn = sqlite3.connect(target_db)
c = cnn.cursor()
c.executescript("""
DROP TABLE IF EXISTS tlkp_colors;
CREATE TABLE tlkp_colors
(
color_id INTEGER PRIMARY KEY,
color_name TEXT
);
DROP TABLE IF EXISTS tbl_palette;
CREATE TABLE tbl_palette
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
color NUMBER
);
INSERT INTO tlkp_colors VALUES (0, 'Choose color');
INSERT INTO tlkp_colors VALUES (10, 'Red');
INSERT INTO tlkp_colors VALUES (20, 'Green');
INSERT INTO tlkp_colors VALUES (30, 'Blue');
""")
cnn.commit()
cnn.close()
def save(self, your_choice):
data_tuple = (your_choice,)
sqlite_insert_query = """INSERT INTO tbl_palette (color) VALUES (?)"""
db = sqlite3.connect(target_db)
c = db.cursor()
c.execute(sqlite_insert_query, data_tuple )
db.commit()
db.close()
def close_db(self):
target_db.close()
def populate_cbo_from_tlkp_table():
cnn = sqlite3.connect(target_db)
c = cnn.cursor()
c.execute("SELECT color_name FROM tlkp_colors")
list_of_strings = [item[0] for item in c.fetchall()]
cnn.commit()
cnn.close()
return list_of_strings
# comment the following line after the first run (db created already)
db = Database() # create a new instance Database
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
ui.comboBox.addItems(populate_cbo_from_tlkp_table())
ui.pushButton.clicked.connect(lambda : db.save(ui.comboBox.currentIndex()))
MainWindow.show()
sys.exit(app.exec_())
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
当我单击“保存”按钮时,我希望将颜色的 id 保存在基础表 tbl_palette
中,而不是颜色本身 - 即我想要 10
不是"Red"
.
如果您能解释如何更改代码来做到这一点,我将非常感激。我在网上搜索过,但到目前为止我所看到的没有任何内容可以帮助我解决我的问题。我是 Qt Designer 的新手,似乎我遗漏了一些东西。
最佳答案
我根据ekhumoro的建议更改了代码:
我替换了
def populate_cbo_from_tlkp_table():
cnn = sqlite3.connect(target_db)
c = cnn.cursor()
c.execute("SELECT color_name FROM tlkp_colors")
list_of_strings = [item[0] for item in c.fetchall()]
cnn.commit()
cnn.close()
return list_of_strings
与
def populate_cbo_from_tlkp_table():
cnn = sqlite3.connect(target_db)
c = cnn.cursor()
c.execute("SELECT color_name, color_id FROM tlkp_colors")
rows = c.fetchall()
for row in rows:
ui.comboBox.addItem(str(row[0]), row[1])
print(row)
cnn.commit()
cnn.close()
和
ui.comboBox.addItems(populate_cbo_from_tlkp_table())
ui.pushButton.clicked.connect(lambda : db.save(ui.comboBox.currentIndex()))
与
populate_cbo_from_tlkp_table()
ui.pushButton.clicked.connect(lambda : db.save(ui.comboBox.currentData()))
现在它完全按照我想要的方式进行了。
关于python - 从 QComboBox 选择字符串并将 ID 插入 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58783379/
我使用 Qt Designer 来构建我的 UI 布局。在布局上,我有一个名为 cb_fac_cd 的组合框.在我的代码中,我有一个函数可以根据我尝试构建的列表自动构建一个组合框。我在数据库中定义了很
我正在创建带有复选框的 QComboBox。如何防止鼠标单击时 View 折叠?我希望能够设置复选框,但是每次单击项目时 - QComboBox 的下拉菜单都会折叠起来。 注意:目前我正在调试 Qt
我为 QComboBox 创建了模型: #ifndef QCOMBOBOXMODEL_H #define QCOMBOBOXMODEL_H #include class QComboBoxModel
我如何实现 QComboBox允许您从树结构中进行选择,类似于 QTreeView ? 最佳答案 我在 developer.nokia.com( Part 1 , Part 2 )上使用两部分配方想出
当 QComboBox 的 currentIndex 更改时,我需要使用 currentIndex+1 调用函数。今天早上我在语法上苦苦挣扎: // call function readTables(
我正在 PyQt 中开发一个应用程序,该应用程序采用对象字典,并允许您实时绘制从机器人流式传输的变量。我正在努力启用此功能的一件事是下拉菜单。不幸的是,我们有几百个变量,所以我的 PyQt Combo
我想把 QComboBox变成 QStandardItem用于 QStandardItemModel .我一直在环顾四周,我找不到答案,有什么想法吗? 最佳答案 您不存储 QComboBox在 QSt
我的 ui 上有一个 QComboBox 并像这样设置模型: QStringListModel* model = new QStringListModel; QStringList stringlis
我正在尝试在 QT5 中设置组合框的样式。我使用 QT Creator 进行布局并在启动时加载应用程序范围的样式表。 我与组合框相关的CSS如下: QComboBox { color:whit
我在输入表单上有一个可编辑组合框,其背景在接收焦点时必须更改。以下代码适用于 QLineEdit,但对 QComboBox 没有影响。 QLineEdit, QComboBox { backgroun
我想知道 QComboBox 中有多少像素需要这个项目: 红色 - 复选框 绿色 - 复选框结尾和文本开头之间的距离 蓝色 - 边框末端和复选框开始之间的距离 在 QStyle 的文档中,我找到了两种
从“正常”QCombobox开始 我想要一个 QCombobox,它仅在展开时显示图标,但在折叠时不显示。 我找到了类似问题的几个答案,但它们都显示了更复杂情况的代码,而我还没有设法提取其核心。 我见
我工作的应用程序 GUI 需要一个组合框供用户选择项目。当应用程序启动时,组合框将显示类似于“请选择”的提示文本,而不是显示组合框的第一项。我在 http://doc.qt.io/qt-5/qcomb
我想设计我的 QComboBox与下拉项目的 margin 。这是现在的样子: 我想要这样的东西: 我试过 QComboBox QAbstractItemView::item { margin
这是我的代码片段: self.cursor.execute("MATCH (n:Person) RETURN n.firstname, n.lastname") for i in self.curso
通常我会通过说将项目添加到 QCombobox: QCombobox cbb; cbb.addItem("Hello"); 但是如果我尝试这个,我会得到一个错误: QComboBox cbb; QSt
我发现在最新的 Qt 版本中(目前我使用的是 5.4.1,但在 5.2 中是一样的)如果我将几个项目添加到 QComboBox 并将鼠标光标定位在特定位置,它会自行滚动,这确实是烦人……我想。 我在
当 QComboBox 的下拉列表打开时,键盘输入被用作(不是特别聪明的)搜索元素的方式。我想禁用它并将键盘事件的处理传播到父小部件。怎么办呢?我已经尝试在子类中重新实现 keyPressEvent
我有一个数据库,其中包含两种类型的同一事物。假设我有动物,然后两种类型是鸟类和鱼类。我想要一个将两者组合在一起的组合框。所以基本上你可以选择任何动物,一些鸟或一些鱼。 在组合框中,我想显示数据库中所有
我已将 QComboBox 子类化以根据特殊需要对其进行自定义。该子类用于在 QtDesigner 的 ui 文件中提升 QComboBoxes。一切正常,除了当我在插槽中放置断点时,程序不会在断点处
我是一名优秀的程序员,十分优秀!