23 Kasım 2016 Çarşamba
PYQT / Tablo(qtablewidget)' dan veri ile arama yapıp, bulunan veriye ait row' u highlight etme.
PYQT ile bilgilerimi paylaşmak isterim. Bana aşağıdaki mail adreslerinden ulaşabilirsiniz.
adevrimgezgin@gmail.com | devrimgezgin@dcptr.com
Herkese iyi çalışmalar.
Eğer Item based Tablo(qtablewidget) kullanırsanız tablonun içinden bir veri arayıp, bu veriye ait olan satırı işaretlemek (select row) etmek mümkün olmuyor. Bu işlemi "model based" tablolarda yapmak mümkün.
Ağaşıdaki örnekte 2 kolondan oluşan bir tablo mevcut ve tablo verilerini MYSQL üzerinden çekiyor.
SQL' den dönen listeyi bir döngü yardımı ile satır satır tabloya işliyor, aynı zamanda her satırı tabloya dökerken bir taraftan da işlediği her veriyi bir list' e aktarıyor. Sonra bu listenin sırasını sayarak kaçıncı sırada olduğunu belirliyor ve bu satırı tabloda bulup işaretliyor.
Benim örneğimde "row[0]": sqlden gelen tablodaki kayıt no kısmına denk geliyor.
Kayıt no kısmında aradığım text' i list' ten bulup, tabloda denk gelen satır numarasını select ediyor.
Bu işlemi aşağıdaki döngü ile yapıyor. "self.rows_rowno_list" listemin adı.
for i in xrange(len(self.rows_rowno_list)): ###### list' imin uzunluğunu hesaplar.
if self.rows_rowno_list[i] == 16: ###### aradığım verinin şartlılığını kontrol eder.
self.tableWidget.selectRow(i) ###### şartı doğrulayan satırı tabloda işratler.
self.tableWidget.setFocus(True) ###### focusu tabloya çağırır.
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'table_view_test.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
from PyQt4.QtSql import *
import MySQLdb
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(229, 357)
self.gridLayout = QtGui.QGridLayout(Form)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.tableWidget = QtGui.QTableWidget(Form)
self.tableWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
self.tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(0)
item = QtGui.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtGui.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("Form", "1", None))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("Form", "2", None))
self.pushButton.setText(_translate("Form", "PushButton", None))
self.get()
def mysql_connect(self):
try:
self.conn = MySQLdb.connect(host= "XXXXX",user="XXXX", passwd="XXX", db="XXX")
self.cur = self.conn.cursor()
self.conn.set_character_set('utf8')
self.cur.execute('SET NAMES utf8;')
self.cur.execute('SET CHARACTER SET utf8;')
self.cur.execute('SET character_set_connection=utf8;')
except Exception, err:
print err
def get(self):
self.mysql_connect()
self.sorgu = self.cur.execute("SELECT * FROM safak_is_takip_giris order by 'tarih' DESC")
self.rows = self.cur.fetchall()
self.rows_rowno_list=[]
for i in reversed(range(self.tableWidget.rowCount())):
self.tableWidget.removeRow(i)
for row in self.rows:
self.rows_rowno_list.append(row[0])
self.tableWidget.insertRow(self.tableWidget.rowCount())
id= QtGui.QTableWidgetItem(str(row[0]), 1)
self.tableWidget.setItem(self.tableWidget.rowCount()-1, 0, id)
bolum= QtGui.QTableWidgetItem(str(row[1]), 2)
self.tableWidget.setItem(self.tableWidget.rowCount()-1, 1, bolum)
for i in xrange(len(self.rows_rowno_list)):
if self.rows_rowno_list[i] == 16:
self.tableWidget.selectRow(i)
self.tableWidget.setFocus(True)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder