class SmsFrame(wx.Dialog): """docstring for SmsFrame""" def __init__(self, *arg, **kwargs): super(SmsFrame, self).__init__(*arg, **kwargs, size=(700, 500)) panel = wx.Panel(self) panel.SetBackgroundColour(wx.WHITE) wx.StaticText(self, -1, "Penerima", pos=(10, 10)) self.nomor = wx.TextCtrl(self, -1, pos=(10, 40), size=(300, 30)) self.boxmsg = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, pos=(330, 40), size=(330, 350)) self.send = wx.Button(self, -1, "Kirim", pos=(330, 400)) wx.Button(self, -1, "Batal", pos=(420, 400)) self.pilihb = wx.Button(self, -1 , "Pilih", pos=(510, 400)) self.pilihb.Bind(wx.EVT_BUTTON, self.pilih) self.send.Bind(wx.EVT_BUTTON, self.kirim) self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER, pos=(10, 100), size=(300,350)) self.dataOlv.SetColumns([ ColumnDefn("No", "left", 150, "no_telp"), ColumnDefn("Nama", "left", 100, "nama") ]) query = ("SELECT nama_pel, no_telp FROM tb_member") stmt = '' hasil = connector.Execute(query, stmt, 4) sql = hasil["Data"] data = [] for i in sql: dict = {"no_telp": i[0], "nama": i[1]} data.append(dict) self.dataOlv.SetObjects(data) self.SetTitle("Sms Gateway") self.Show(True) def kirim(self, e): no_telp = self.nomor.GetValue() msg = self.boxmsg.GetValue() account_sid = "AC3cddc95d61ca0bb2e33dc5f8b48c93e8" auth_token = "f8d01a882f7e58b8b87d34fe1c6f1865" client = Client(account_sid, auth_token) message = client.messages.create( to=no_telp, from_="+15863718428", body=msg ) tglhari = datetime.datetime.now().date() query = ("INSERT INTO tb_sms_terkirim (status, no_telp, tanggal, keterangan) VALUES (%s,%s,%s,%s)") stmt = ("terkirim", no_telp, tglhari, msg) connector.Execute(query, stmt, 1) def pilih(self, e): ind = self.dataOlv.GetFirstSelected() if ind >= 0 : self.item = self.dataOlv.GetItem(ind, 1) self.nomor.SetValue(self.item.GetText())
class TabTwo(wx.Panel): """docstring for TabTwo""" capture = '' def __init__(self, parent, capture=capture): wx.Panel.__init__(self, parent) self.photoDefault = "images/no_webcam.jpg" self.pathp = '' #pic = wx.Image(self.photoDefault, wx.BITMAP_TYPE_ANY).ConvertToBitmap() #wx.StaticBitmap(self, -1, pic, (50,20), (1000,300)) bitmap = wx.Bitmap(self.photoDefault) bitmap = scale_bitmap(bitmap, 640, 380) control = wx.StaticBitmap(self, -1, bitmap) control.SetPosition((50, 280)) #50, 420 self.text = wx.StaticText(self, -1, "B805WYN", (790, 280)) font = wx.Font(20, wx.DECORATIVE, wx.NORMAL, wx.NORMAL) self.text.SetFont(font) #Button self.btnOpenFile = wx.Button(self, -1, "Open File", pos=(720, 320), size=(120, 30)) self.btnStart = wx.Button(self, -1, "Start", pos=(720, 350), size=(120, 30)) self.btnStop = wx.Button(self, -1, "Stop", pos=(720, 350), size=(120, 30)) self.btnRecog = wx.Button(self, -1, "Recognize", pos=(720, 380), size=(120, 30)) self.btntambahData = wx.Button(self, -1, "Tambah Data", pos=(850, 320), size=(120, 30)) self.btnKepen = wx.Button(self, -1, "Tambah Kepentingan", pos=(850, 350), size=(120, 30)) # #event self.btnStop.Hide() self.btnStart.Bind(wx.EVT_BUTTON, self.start) self.btnStop.Bind(wx.EVT_BUTTON, self.stop) self.btnOpenFile.Bind(wx.EVT_BUTTON, self.openFile) self.btnRecog.Bind(wx.EVT_BUTTON, self.recognition) self.btnKepen.Bind(wx.EVT_BUTTON, self.kepentingan) self.btntambahData.Bind(wx.EVT_BUTTON, self.tambahData) #bx = wx.StaticBox(self, 1, pos=(690,9), size=(300, 140)) #customize self.btnStart.SetBitmap(wx.Bitmap("images/rec.png")) self.btnStop.SetBitmap(wx.Bitmap("images/stop.png")) self.btnOpenFile.SetBitmap(wx.Bitmap("images/folder(1).png")) self.btnRecog.SetBitmap(wx.Bitmap("images/eye-button.png")) #camera setup #videoWarper = wx.StaticBox(self, label="Video",size=(400,300)) #videoBoxSizer = wx.StaticBoxSizer(videoWarper, wx.VERTICAL) parent.Centre() self.Show() #hasil Recog text = wx.StaticText(self, -1, "Nomor Plat :", (1020, 30)) text = wx.StaticText(self, -1, "Daerah :", (1020, 50)) self.plateNumberPlat = wx.StaticText(self, -1, "Unknown", (1140, 30)) daerahPlat = wx.StaticText(self, -1, "Unknown", (1140, 50)) #-----Database------ text = wx.StaticText(self, -1, "Name :", (1020, 70)) text = wx.StaticText(self, -1, "Date Added :", (1020, 90)) text = wx.StaticText(self, -1, "Latest Visit :", (1020, 110)) text = wx.StaticText(self, -1, "Visit :", (1020, 130)) text = wx.StaticText(self, -1, "Kepentingan :", (1020, 150)) text = wx.StaticText(self, -1, "Tanggal Rekom :", (1020, 150)) self.nameDatabaseRecog = wx.StaticText(self, -1, "Unknown", (1140, 70)) self.dateAddedRecog = wx.StaticText(self, -1, "Unknown", (1140, 90)) self.latestVisitDatabaseRecog = wx.StaticText(self, -1, "Unknown", (1140, 110)) self.visitDatabaseRecog = wx.StaticText(self, -1, "Unknown", (1140, 130)) self.kepentinganText = wx.StaticText(self, -1, "Unknown", (1140, 150)) self.rekomendasiText = wx.StaticText(self, -1, "Unknown", (1140, 170)) #end Recog #list Recognition self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, pos=(50, 20), size=(950, 250)) #list candidates self.dataOlvCand = ObjectListView(self, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, pos=(1020, 270), size=(310, 200)) self.dataMobilTampil = [] #List Credit Digunakan labelCredit = wx.StaticText(self, -1, "Credit 2000 / Month", pos=(1020, 503)) self.dataOlvCre = ObjectListView(self, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, pos=(1020, 520), size=(320, 150)) self.dataCredit = [] self.btnRecog.Disable() def tambahData(self, e): ind = self.dataOlv.GetFirstSelected() if ind >= 0: self.item = self.dataOlv.GetItem(ind) print(ind) app = data_kendaraan.data_Kendaraan(self) app.Show(True) def kepentingan(self, e): hasil = kp.KepentinganFrame(self) hasil.Show(True) def start(self, e): self.capture = cv2.VideoCapture(0) videoFrame = wx.Panel(self, -1, pos=(50, 280), size=(640, 380)) ShowCapture(videoFrame, self.capture) self.btnStart.Hide() self.btnStop.Show() self.btnRecog.Enable() self.pathp = '' def stop(self, e): self.btnStart.Show() self.btnStop.Hide() bitmap = wx.Bitmap(self.photoDefault) bitmap = scale_bitmap(bitmap, 640, 380) control = wx.StaticBitmap(self, -1, bitmap) control.SetPosition((50, 280)) self.btnRecog.Disable() self.capture.release() def openFile(self, e): openFileDialog = wx.FileDialog(self, "Open", "", "", "Image File (*.jpg, *.png)|*.jpg", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) openFileDialog.ShowModal() #Pake If kjklnjaksjdhkdj self.pathp = openFileDialog.GetPath() bitmap = wx.Bitmap(openFileDialog.GetPath()) bitmap = scale_bitmap(bitmap, 640, 380) control = wx.StaticBitmap(self, -1, bitmap) control.SetPosition((50, 280)) openFileDialog.Destroy() self.btnRecog.Enable() def recognition(self, e): print(self.pathp) if self.pathp == '': self.ret, self.image = self.capture.read() print(self.ret) print(self.image) if os.path.exists("itemp\plate\plat1.jpg"): self.imageName = "itemp\plate\plat_{0}.jpg".format( int(time.time())) cv2.imwrite(self.imageName, self.image) self.jsonName = "itemp\json\json_{0}.json".format( int(time.time())) else: self.imageName = "itemp\plate\plat1.jpg" cv2.imwrite(self.imageName, self.image) self.jsonName = "itemp\json\json1.json" bitmap = wx.Bitmap(self.imageName) bitmap = scale_bitmap(bitmap, 280, 200) control = wx.StaticBitmap(self, -1, bitmap) control.SetPosition((720, 420)) IMAGE_PATH = self.imageName else: IMAGE_PATH = self.pathp SECRET_KEY = 'sk_42b18388bc96def5ad015425' with open(IMAGE_PATH, 'rb') as image_file: img_base64 = base64.b64encode(image_file.read()) url = 'https://api.openalpr.com/v2/recognize_bytes?recognize_vehicle=1&country=id&secret_key=%s' % ( SECRET_KEY) try: r = requests.post(url, data=img_base64) except Exception as e: print("Error: Kendaraan Tidak Ditemukan") return data_file = json.dumps(r.json(), indent=2) data = json.loads(str(data_file)) hasil = data['results'][0] tanggalini = datetime.datetime.now() query = ( "SELECT keterangan2, rekomendasi FROM tb_kunjungan WHERE plate = %s and tgl_kunjungan = %s" ) stmt = (hasil['plate'], "{0}".format(str(tanggalini)[:10])) datarek = connector.Execute(query, stmt, 4) hasilrek = datarek["Data"] print(hasilrek) if len(hasilrek) > 0: self.kepentinganText.SetLabel(str(hasilrek[0][0])) self.rekomendasiText.SetLabel(str(hasilrek[0][1])) else: self.kepentinganText.SetLabel("Belum Terdaftar") self.rekomendasiText.SetLabel("Belum Terdaftar") query = ("SELECT * FROM tb_member WHERE plate IN (%s)") stmt = (hasil['plate']) hasilSql = connector.Execute(query, stmt, 3) dataSql = hasilSql['Data'] print(dataSql) if len(dataSql) > 0: self.dict = { "camera": "Camera 1", "time": str(datetime.datetime.now().time()), "merk": dataSql[0][5], "perusahaan": dataSql[0][6], "model": dataSql[0][7], "warna": dataSql[0][4], "tahun": dataSql[0][8], "plate": hasil['plate'] } else: self.plateMobil = hasil['plate'] self.warnaMobil = hasil["vehicle"]['color'][0]['name'].upper() self.merkMobil = hasil["vehicle"]['make_model'][0]['name'].upper(), self.perusahaanMobil = hasil["vehicle"]['make'][0]['name'].upper() self.tahunMobil = str(hasil["vehicle"]['year'][0]['name']) self.modelMobil = hasil["vehicle"]['body_type'][0]['name'].upper() self.dict = { "camera": "Camera 1", "time": str(datetime.datetime.now().time()), "merk": self.merkMobil, "perusahaan": self.perusahaanMobil, "model": self.modelMobil, "warna": self.warnaMobil, "tahun": self.tahunMobil, "plate": self.plateMobil } self.plateNumberPlat.SetLabel(hasil['plate']) self.text.SetLabel(hasil['plate']) if len(dataSql) > 0: tanggal = str(dataSql[0][2]) self.nameDatabaseRecog.SetLabel(dataSql[0][1]) self.dateAddedRecog.SetLabel("{0}".format(tanggal[:10])) self.latestVisitDatabaseRecog.SetLabel(str(dataSql[0][11])) query = ("SELECT * FROM tb_kunjungan WHERE plate IN (%s)") stmt = (hasil['plate']) jmlSql = connector.Execute(query, stmt, 3) datajmlh = jmlSql['Data'] self.visitDatabaseRecog.SetLabel(str(len(datajmlh) + 1)) query = ( "INSERT INTO tb_kunjungan (plate, tgl_kunjungan) VALUES (%s, %s)" ) stmt = (dataSql[0][0], datetime.datetime.now()) hasilSql = connector.Execute(query, stmt, 1) query = ("UPDATE tb_member SET latest_visit = %s WHERE plate = %s") stmt = (datetime.datetime.now(), dataSql[0][0]) hasilSql = connector.Execute(query, stmt, 1) else: self.nameDatabaseRecog.SetLabel("Tidak Terdaftar") self.dateAddedRecog.SetLabel("Tidak Terdaftar") self.latestVisitDatabaseRecog.SetLabel("Hari Ini") self.visitDatabaseRecog.SetLabel("1") query = ( "INSERT INTO tb_kunjungan (plate, tgl_kunjungan) VALUES (%s, %s)" ) stmt = (hasil['plate'], datetime.datetime.now()) hasilSql = connector.Execute(query, stmt, 1) candidates = hasil['candidates'] e = [] for i in candidates: Candidates = { 'confidences': str(int(i['confidence'])) + " " + "%", 'plate': i['plate'] } e.append(Candidates) self.dataOlv.SetColumns([ ColumnDefn("Camera", "left", 100, "camera"), ColumnDefn("Time", "left", 100, "time"), ColumnDefn("Plate", "left", 100, "plate"), ColumnDefn("Merk", "left", 100, "merk"), ColumnDefn("Perusahaan", "left", 102, "perusahaan"), ColumnDefn("Model", "left", 100, "model"), ColumnDefn("Warna", "left", 100, "warna"), ColumnDefn("Tahun", "left", 100, "tahun") ]) self.dataMobilTampil.append(self.dict) self.dataOlv.SetObjects(self.dataMobilTampil) self.dataOlvCand.SetColumns([ ColumnDefn("Plate", 'left', 100, 'plate'), ColumnDefn("confidence", 'left', 100, 'confidences') ]) self.dataOlvCand.SetObjects(e) credit = { "credit": 2000, "digunakan": data['credits_monthly_used'], "sisa": 2000 - int(data['credits_monthly_used']) } self.dataOlvCre.SetColumns([ ColumnDefn("Credit", "left", 100, "credit"), ColumnDefn("Digunakan", "left", 100, "digunakan"), ColumnDefn("Sisa", "left", 100, "sisa") ]) self.dataCredit.append(credit) self.dataOlvCre.SetObjects(self.dataCredit)
class data_Kendaraan(wx.Dialog): """docstring for data_Kendaraan""" def __init__(self, *arg, **kwargs): super(data_Kendaraan, self).__init__(*arg, **kwargs, pos=(300, 50), size=(900, 600)) self.SetTitle("Data Kendaraan") panel = wx.Panel(self) panel.SetBackgroundColour(wx.WHITE) #tampil data self.tampilMysql() #label-label wx.StaticText(self, -1, "Nomor Plat :", pos=(30, 20)) wx.StaticText(self, -1, "Nama Pelanggan :", pos=(30, 50)) wx.StaticText(self, -1, "No Telp :", (30, 80)) wx.StaticText(self, -1, "Merk :", (30, 110)) wx.StaticText(self, -1, "Model :", (30, 140)) wx.StaticText(self, -1, "Perusahaan :", (500, 20)) wx.StaticText(self, -1, "Warna :", (500, 50)) wx.StaticText(self, -1, "Jenis :", (500, 80)) wx.StaticText(self, -1, "Tahun :", (500, 110)) #textbox-textbox self.txtNomor = wx.TextCtrl(self, -1, pos=(150, 20), size=(30, 25)) wx.TextCtrl(self, -1, pos=(190, 20), size=(50, 25)) wx.TextCtrl(self, -1, pos=(250, 20), size=(50, 25)) self.txtNama = wx.TextCtrl(self, -1, pos=(150, 50), size=(250, 25)) self.txtTelp = wx.TextCtrl(self, -1, pos=(150, 80), size=(250, 25)) self.txtMerk = wx.TextCtrl(self, -1, pos=(150, 110), size=(250, 25)) self.txtModel = wx.TextCtrl(self, -1, pos=(150, 140), size=(250, 25)) self.txtPerusahaan = wx.TextCtrl(self, -1, pos=(600, 20), size=(250, 25)) self.txtWarna = wx.TextCtrl(self, -1, pos=(600, 50), size=(250, 25)) pilihanJenis = ["Mobil", "Motor"] self.txtJenis = wx.ComboBox(self, choices=pilihanJenis, pos=(600, 80), size=(250, 25)) pilihanTahun = [ "1996 - 2000", "2001 - 2004", "2005 - 2009", "2010 - 2014", "2015 - 2019" ] self.txtTahun = wx.ComboBox(self, choices=pilihanTahun, pos=(600, 110), size=(250, 25)) pilihanSort = ["Nomor Plat", "Nama", "Tanggal", "Jenis", "Perusahaan"] self.txtSort = wx.ComboBox(self, choices=pilihanSort, pos=(300, 191.5), size=(190, 24)) self.txtSort.SetValue("Nama") self.txtSearch = wx.TextCtrl(self, -1, pos=(600, 191.5), size=(250, 24)) self.txtPilihan = wx.TextCtrl(self, -1) self.txtPilihan.SetValue("add") self.txtPilihan.Hide() #button-button self.btnsave = wx.Button(self, -1, "Save", pos=(500, 140)) self.btnCancel = wx.Button(self, -1, "Cancel", pos=(600, 140)) self.btnEdit = wx.Button(self, -1, "Edit", pos=(30, 190)) self.btnDelete = wx.Button(self, -1, "Delete", pos=(120, 190)) self.btnSort = wx.Button(self, -1, "Sort By", pos=(210, 190)) self.btnSearch = wx.Button(self, -1, "Search", pos=(500, 190)) self.btnkepentingan = wx.Button(self, -1, "Kepentingan", pos=(700, 140)) #event-event self.btnsave.Bind(wx.EVT_BUTTON, self.saveData) self.btnEdit.Bind(wx.EVT_BUTTON, self.editData) self.btnDelete.Bind(wx.EVT_BUTTON, self.deleteData) self.btnCancel.Bind(wx.EVT_BUTTON, self.cancelBtn) self.txtSearch.Bind(wx.EVT_TEXT, self.searching) self.btnkepentingan.Bind(wx.EVT_BUTTON, self.tampil) self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER, pos=(10, 230), size=(850, 300)) self.setDataMobil() self.Centre() self.Show(True) def tampil(self, e): hasil = kp.KepentinganFrame(self) hasil.Show(True) def searching(self, e): self.setSearch() self.setDataMobil() def setSearch(self): varSearch = self.txtSearch.GetValue() valSort = self.txtSort.GetValue() if valSort == "Nomor Plat": query = ("SELECT * FROM tb_member WHERE plate LIKE %s") elif valSort == "Tanggal": query = ("SELECT * FROM tb_member WHERE added_date LIKE %s") elif valSort == "Perusahaan": query = ("SELECT * FROM tb_member WHERE perusahaan LIKE %s") elif valSort == 'Jenis': query = ("SELECT * FROM tb_member WHERE jenis LIKE %s") else: query = ("SELECT * FROM tb_member WHERE nama_pel LIKE %s") stmt = ("%" + varSearch + "%") self.datasek = [] hasil = connector.Execute(query, stmt, 3) if hasil != 'Koneksi Gagal': data = hasil['Data'] for i in data: self.tanggalIni = str(i[2]) dict = { 'plate': i[0], 'nama': i[1], 'tanggal': "{0}".format(self.tanggalIni[:10]), 'warna': i[4], 'merk': i[5], 'perusahaan': i[6], 'model': i[7], 'tahun': i[8], 'jenis': i[9], "telp": i[10] } self.datasek.append(dict) else: wx.MessageBox(message="Cek Koneksi Anda", caption="Error", style=wx.OK | wx.ICON_INFORMATION) def setDataMobil(self, data=None): self.dataOlv.SetColumns([ ColumnDefn("Plate", "left", 100, "plate"), ColumnDefn("Nama", "left", 100, "nama"), ColumnDefn("Telp", "left", 100, "telp"), ColumnDefn("Added", "left", 90, "tanggal"), ColumnDefn("Jenis", "left", 70, "jenis"), ColumnDefn("Merk", "left", 100, "merk"), ColumnDefn("Perusahaan", "left", 102, "perusahaan"), ColumnDefn("Model", "left", 100, "model"), ColumnDefn("Warna", "left", 100, "warna"), ColumnDefn("Tahun", "left", 100, "tahun") ]) if self.txtSearch != '': self.setSearch() self.dataOlv.SetObjects(self.datasek) else: self.dataOlv.SetObjects(self.dataMobil) def tampilMysql(self): self.dataMobil = [] #--Getting Data Mobil From Mysql query = "SELECT * FROM tb_member ORDER BY added_date DESC" stmt = '' hasil = connector.Execute(query, stmt, 2) if hasil != 'Koneksi Gagal': data = hasil['Data'] for i in data: self.tanggalIni = str(i[2]) dict = { 'plate': i[0], 'nama': i[1], 'tanggal': "{0}".format(self.tanggalIni[:10]), 'warna': i[4], 'merk': i[5], 'perusahaan': i[6], 'model': i[7], 'tahun': i[8], 'jenis': i[9], "telp": i[10] } self.dataMobil.append(dict) else: wx.MessageBox(message="Cek Koneksi Anda", caption="Error", style=wx.OK | wx.ICON_INFORMATION) #--end def saveData(self, e): self.getValueTextBox() if self.txtPilihan.GetValue() == 'add': if self.nomor == '' or self.nama == '' or self.telp == '' or self.merk == '' or self.model == '' or self.perusahaan == '' or self.warna == '' or self.jenis == '' or self.tahun == '': dlg = wx.MessageDialog(self, "Pastikan Data Sudah Penuh", "Perhatian", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() return else: query = ( "INSERT INTO tb_member (plate, nama_pel, added_date, warna, merk, perusahaan, model, tahun, jenis, no_telp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" ) stmt = (self.nomor.upper(), self.nama, datetime.datetime.now(), self.warna.upper(), self.merk.upper(), self.perusahaan.upper(), self.model.upper(), self.tahun, self.jenis.upper(), self.telp) hasil = connector.Execute(query, stmt, 1) self.tampilMysql() self.setDataMobil() self.delValueTextBox() elif self.txtPilihan.GetValue() == "edit": query = ( "UPDATE tb_member SET nama_pel = %s, warna = %s, merk = %s, perusahaan = %s, model = %s, tahun = %s, jenis = %s, no_telp = %s WHERE plate = %s" ) stmt = (self.nama, self.warna.upper(), self.merk.upper(), self.perusahaan.upper(), self.model.upper(), self.tahun, self.jenis.upper(), self.telp, self.nomor.upper()) connector.Execute(query, stmt, 1) self.tampilMysql() self.setDataMobil() self.delValueTextBox() self.txtPilihan.SetValue('add') self.txtNomor.Enable() def editData(self, e): ind = self.dataOlv.GetFirstSelected() if ind >= 0: self.item = self.dataOlv.GetItem(ind) self.item2 = self.dataOlv.GetItem(ind, 1) query = ("SELECT * FROM tb_member WHERE plate = %s and nama_pel = %s") stmt = (self.item.GetText(), self.item2.GetText()) hasil = connector.Execute(query, stmt, 4) data = hasil['Data'] self.txtNomor.SetValue(data[0][0]) self.txtNama.SetValue(data[0][1]) self.txtTelp.SetValue(data[0][10]) self.txtMerk.SetValue(data[0][5]) self.txtModel.SetValue(data[0][7]) self.txtPerusahaan.SetValue(data[0][6]) self.txtWarna.SetValue(data[0][4]) self.txtJenis.SetValue(data[0][9]) self.txtTahun.SetValue(data[0][8]) self.txtPilihan.SetValue("edit") self.txtNomor.Disable() def deleteData(self, e): ind = self.dataOlv.GetFirstSelected() if ind >= 0: self.item = self.dataOlv.GetItem(ind) self.item2 = self.dataOlv.GetItem(ind, 1) query = ("DELETE FROM tb_member WHERE plate = %s and nama_pel = %s") stmt = (self.item.GetText(), self.item2.GetText()) connector.Execute(query, stmt, 1) self.tampilMysql() self.setDataMobil() def cancelBtn(self, e): self.delValueTextBox() self.txtNomor.Enable() self.txtPilihan.SetValue('add') def getValueTextBox(self): self.nomor = self.txtNomor.GetValue() self.nama = self.txtNama.GetValue() self.telp = self.txtTelp.GetValue() self.merk = self.txtMerk.GetValue() self.model = self.txtModel.GetValue() self.perusahaan = self.txtPerusahaan.GetValue() self.warna = self.txtWarna.GetValue() self.jenis = self.txtJenis.GetValue() self.tahun = self.txtTahun.GetValue() def delValueTextBox(self): self.txtNomor.SetValue('') self.txtNama.SetValue('') self.txtTelp.SetValue('') self.txtMerk.SetValue('') self.txtModel.SetValue('') self.txtPerusahaan.SetValue('') self.txtWarna.SetValue('') self.txtJenis.SetValue('') self.txtTahun.SetValue('')