在qt中创建一个从表中删除数据的按钮

时间:2016-04-04 11:53:23

标签: python mysql qt pyqt delete-row

使用mysql和python,我在PyQt中创建了一个表,允许用户频繁更新和跟踪他们的会议会话。唯一的问题是,我不知道如何编写一个允许我单独删除一行数据的按钮。

我的表看起来像这样:

enter image description here

在插入新数据时,创建一个除了数据行之外会出现的按钮的最简单方法是什么,这将允许用户删除整行?

编辑:

def deleteRows(self):
    items = self.treeWidget.selectedItems()
    current = self.treeWidget.currentItem()
    for item in items:
        sip.delete(current)
        self.UpdateTree()

编辑2:

import mysql.connector
from mysql.connector import errorcode
from datetime import datetime



class DatabaseUtility: 
    def __init__(self, database, tableName):
        self.db = database
        self.tableName = tableName

    f = open('C:\\Users\\Vlad\\Desktop\\Myfiles\\EnterprisePassport\\password.txt', 'r')
    p = f.read(); f.close();
    self.cnx = mysql.connector.connect(user = 'root',
                                password = p,
                                host = '127.0.0.1')
    self.cursor = self.cnx.cursor()

    self.ConnectToDatabase()
    self.CreateTable()

def ConnectToDatabase(self):
    try:
        self.cnx.database = self.db
    except mysql.connector.Error as err:
        if err.errno == errorcode.ER_BAD_DB_ERROR:
            self.CreateDatabase()
            self.cnx.database = self.db
        else:
            print(err.msg)

def CreateDatabase(self):
    try:
        self.RunCommand("CREATE DATABASE %s DEFAULT CHARACTER SET 'utf8';" %self.db)
    except mysql.connector.Error as err:
        print("Failed creating database: {}".format(err))

def CreateTable(self):
    cmd = (" CREATE TABLE IF NOT EXISTS " + self.tableName + " ("
        " `ID` int(5) NOT NULL AUTO_INCREMENT,"
        " `date` date NOT NULL,"
        " `time` time NOT NULL,"
        " `message` char(50) NOT NULL,"
        " PRIMARY KEY (`ID`)"
        ") ENGINE=InnoDB;")
    self.RunCommand(cmd)

def GetTable(self):
    self.CreateTable()
    return self.RunCommand("SELECT * FROM %s;" % self.tableName)

def GetColumns(self):
    return self.RunCommand("SHOW COLUMNS FROM %s;" % self.tableName)

def RunCommand(self, cmd):
    print ("RUNNING COMMAND: " + cmd)
    try:
        self.cursor.execute(cmd)
    except mysql.connector.Error as err:
        print ('ERROR MESSAGE: ' + str(err.msg))
        print ('WITH ' + cmd)
    try:
        msg = self.cursor.fetchall()
    except:
        msg = self.cursor.fetchone()
    return msg

def AddEntryToTable(self, message):
    date1 = datetime.now().strftime("%y-%m-%d")
    time = datetime.now().strftime("%H:%M")

    cmd = " INSERT INTO " + self.tableName + " (date, time, message)"
    cmd += " VALUES ('%s', '%s', '%s' );" % (date1, time, message)
    self.RunCommand(cmd)

def __del__(self):
    self.cnx.commit()
    self.cursor.close()
    self.cnx.close()


if __name__ == '__main__':
    db = 'enterprisepassport'
    tableName = 'session'

    dbu = DatabaseUtility(db, tableName)

2 个答案:

答案 0 :(得分:0)

Just add a button at the top that deletes the selected rows. It looks like your using a QTreeWidget

def __init__(...)
    ...
    self.deleteButton.clicked.connect(self.deleteRows)

def deleteRows(self):
    items = self.tree.selectedItems()
    for item in items:
        # Code to delete items in database
    self.refreshTable()

答案 1 :(得分:-1)

@Randomator,为什么不像向初学者那样解释。甚至我也不明白您的建议。 这个人写了他的代码,对他的代码进行了更正,以便他可以轻松地运行文件