2016-04-04 21 views
0

mysql ve python kullanarak, PyQt içinde bir kullanıcının toplantı oturumlarını sık sık güncelleştirmesine ve izlemesine olanak tanıyan bir tablo oluşturdum. Tek sorun, bir veri satırını tek tek silmeme izin verecek bir düğmeyi nasıl kodlayacağımı bilmiyorum.qt dosyasında veri silmek için bir düğme oluşturma

Benim tablo şöyle görünür:

enter image description here

kullanıcının bu silmek olanak sağlayacak yeni veri takıldığında verilerin satırda yanında görünecek bir düğme oluşturmanın en basit yolu ne olurdu

tüm satır?

Düzenleme:

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

Düzenleme 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

ben güncelleme düğmesinin yanındaki bir silme düğmesi oluşturmak için önermek kullanarak gibi görünüyor (ya da masanın altında) yerine kullanıcı için her satır – Fabio

+0

için bir düğme ekleme, tıklandığında seçili satırları siler satırları seçmek için bir çeşit onay kutusu oluşturmam gerekecek mi yoksa sadece tüm satırın üzerine tıklanması mümkün mü? – Randomator

+2

Yuo, tek tıklamayla tüm satırı seçmek için setSelectionBehavior (QAbstractItemView.SelectRows) kullanabilir. Ayrıca çoklu seçimi etkinleştirmek için setSelectionMode (QAbstractItemView.ExtendedSelection) seçeneğini de göz önünde bulundurun (ctrl + tıklama veya shift + tıklama) – Fabio

cevap

0

Sadece seçili satırları siler üst kısmında bir düğme ekleyin. senin bir 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

Teşekkür ederim, şu anda ürün ve sözdizimini silmek için kullandığınız kod ile mücadele ediyorum. Bu tablo için Mysql kullanıyorum ve denedim kod aşağıdaki gibidir: https://gyazo.com/6443b8b91c9828cdac8f7ac540cbe0a6 (URL için özür dilerim, bir kod blok oluşturmama izin vermiyor gibi görünmüyor) Ve hala ben hala "runCommand" özniteliği veya sıralamada bir şey olmadığını bir hata olsun. – Randomator

+0

soru –

+0

def DeleteRows (öz) kodunuzu ekleyin: öğeleri = self.treeWidget.selectedItems() öğe için öğeler: self.RunCommand ("oturum% s DAN SİL;" % self.tableName) kendini .UpdateTree() (Bu kod ama benim dediğim gibi, bir kod bloğuna koymama izin vermez.) – Randomator