Tablewidget添加问题

这个右键菜单可以增加行 怎么能让他填完数据可以保存到数据库 最好是能根据我代码进行修改的

img

添加一个事件处理函数

def saveDataToDatabase(self):
        db = sqlite3.connect("database.db")
        cursor = db.cursor()
        
        for row in range(self.rowCount()):
            name = self.item(row, 0).text()
            artist = self.item(row, 1).text()
            style = self.item(row, 2).text()
            
            cursor.execute("INSERT INTO songs (name, artist, style) VALUES (?, ?, ?)", (name, artist, style))
        
        db.commit()
        db.close()

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

要在Label Studio中配置本地MySQL数据库,您可以按照以下步骤进行操作:

  1. 安装MySQL数据库:首先,您需要在本地安装MySQL数据库。您可以从MySQL官方网站下载适合您操作系统的安装程序,并按照安装向导进行安装。
  2. 创建数据库:在安装完成后,打开MySQL客户端或使用命令行工具,创建一个新的数据库,供Label Studio使用。您可以使用如下命令创建数据库:
    CREATE DATABASE your_database_name;
     
    将 "your_database_name" 替换为您希望的数据库名称。
  3. 配置Label Studio:打开Label Studio的配置文件(config.xml),找到与数据库相关的配置项。一般来说,您需要找到以下几个配置项并进行相应的修改:
    • DB_TYPE:将数据库类型设置为MySQL。在配置文件中,将该项的值设置为 "mysql"。
    • DB_HOST:设置数据库主机名。如果数据库在本地,则将其设置为 "localhost"。
    • DB_PORT:设置数据库端口号。MySQL的默认端口号是3306,您可以根据实际情况进行设置。
    • DB_NAME:将数据库名称设置为您在第2步中创建的数据库名称。
    • DB_USERDB_PASSWORD:设置连接数据库所需的用户名和密码。这些信息应与您在MySQL中创建的用户凭据相对应。
  4. 保存配置并重新启动Label Studio:保存对配置文件的修改,并重新启动Label Studio应用程序,以使新的配置生效。

配置完成后,Label Studio将使用您指定的本地MySQL数据库进行数据存储和访问。

请注意,具体的配置步骤可能会因Label Studio的版本和您使用的操作系统而有所不同。建议您查阅Label Studio的官方文档或社区支持资源,以获取与您所使用的特定版本和环境相对应的详细配置说明。

可参考GPT给的回答
为了让右键菜单填完数据后能够保存到数据库,你需要为增加行的菜单项添加一个对话框,让用户输入数据,并将数据保存到数据库中。

下面是修改后的代码:

from PyQt5.QtWidgets import QMenu, QTableWidgetItem, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton
import pymysql

def rightMenu(self, pos):
    for i in self.ui.tableWidget.selectionModel().selection().indexes():
        rowindex = i.row()
        if rowindex < 200:
            menu = QMenu()
            item1 = menu.addAction("增加")
            item2 = menu.addAction("删除行")
            screenPos = self.ui.tableWidget.mapToGlobal(pos)
            action = menu.exec(screenPos)
            if action == item1:
                dialog = QDialog()
                layout = QVBoxLayout()
                dialog.setLayout(layout)
                isbn_label = QLabel("ISBN")
                isbn_edit = QLineEdit()
                title_label = QLabel("书名")
                title_edit = QLineEdit()
                author_label = QLabel("作者")
                author_edit = QLineEdit()
                publisher_label = QLabel("出版社")
                publisher_edit = QLineEdit()
                confirm_button = QPushButton("确认")
                layout.addWidget(isbn_label)
                layout.addWidget(isbn_edit)
                layout.addWidget(title_label)
                layout.addWidget(title_edit)
                layout.addWidget(author_label)
                layout.addWidget(author_edit)
                layout.addWidget(publisher_label)
                layout.addWidget(publisher_edit)
                layout.addWidget(confirm_button)
                confirm_button.clicked.connect(lambda: self.add_book(isbn_edit.text(), title_edit.text(), author_edit.text(), publisher_edit.text()))
                dialog.exec_()
            elif action == item2:
                if self.ui.tableWidget.rowCount() > 0:
                    conn = pymysql.connect(host='localhost', user='root', password='123456', database='datamy', port=3306)
                    #获取游标
                    cursor = conn.cursor()
                    id = self.ui.tableWidget.item(self.ui.tableWidget.currentRow(),4).text()
                    sql = 'delete from books where ISBN=%s'
                    cursor.execute(sql,[id])
                    conn.commit()
                    conn.close()
                    self.readmysql()
                    # self.ui.tableWidget.removeRow(i.row())
            else:
                return

def add_book(self, isbn, title, author, publisher):
    conn = pymysql.connect(host='localhost', user='root', password='123456', database='datamy', port=3306)
    cursor = conn.cursor()
    sql = 'insert into books(ISBN, Title, Author, Publisher) values(%s, %s, %s, %s)'
    cursor.execute(sql, [isbn, title, author, publisher])
    conn.commit()
    conn.close()
    self.readmysql()

在增加行的菜单项中,我们创建了一个对话框,并添加了用于输入数据的文本框和确认按钮。当用户点击确认按钮时,我们调用了一个新的函数add_book,将输入的数据保存到数据库中。

add_book函数中,我们打开了数据库连接,并将用户输入的数据插入到books表中。最后,我们关闭了数据库连接,并重新读取了数据库中的数据,以更新表格中的行。

注意,我们将add_book函数添加到了类中,因此需要使用self.add_book来调用它。