2016-04-04 8 views
0

mysqlとpythonを使用して、私はPyQt内にテーブルを作成しました。これにより、ユーザはミーティングセッションを頻繁に更新して追跡できます。唯一の問題は、データの行を個別に削除するためのボタンをコーディングする方法がわからないことです。qtのテーブルからデータを削除するボタンを作成する

私のテーブルには、そうのようになります。

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) 
+0

を使用してのように、私は(またはテーブルの下)更新ボタンの近くに削除ボタンを作成することをお勧めになりますクリックしたときに、選択した行を削除し、その代わりに、ユーザーのために、各行 – Fabio

+0

ためのボタンを追加します行を選択するには、ある種のチェックボックスを作成するか、それをクリックして行全体を選択するだけですか? – Randomator

+2

1回のクリックで行全体を選択するには、setSelectionBehavior(QAbstractItemView.SelectRows)を使用できます。また、複数の選択を有効にするにはsetSelectionMode(QAbstractItemView.ExtendedSelection)を考慮してください。 – Fabio

答えて

0

だけで、選択した行を削除します上部にあるボタンを追加します。それはあなたが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() 
+0

ありがとうございます、ありがとうございます、私は項目とそれの構文を削除するためのコードで今苦労しています。私はこのテーブルのためにMysqlを使用しています。私が試したコードは次のとおりです:https://gyazo.com/6443b8b91c9828cdac8f7ac540cbe0a6(URLには申し訳ありませんが、コードブロックを作成させるようには見えません)属性 "runCommand"または何らかの並べ替えがないというエラーが表示されます。 – Randomator

+0

質問に、あなたのコードを追加します –

+0

デフdeleteRows(自己):項目内の項目のための 項目= self.treeWidget.selectedItems() : self.RunCommand( "セッション%sから削除;" %のself.tableName) 自己を.UpdateTree()(これはコードですが、私が言ったように、コードブロックに入れられません)。 – Randomator

関連する問題