Форум сайта python.su
0
Вообще где можно почитать про все это на русском?
Офлайн
186
> beginResetModel а это что?
beginResetModel - начало перезаполнения данных
endResetModel - конец перезаполнения данных
Эти методы нужны для того что-бы сообщить представлению что данные поменялись.
> Вообще где можно почитать про все это на русском?
Марк Саммерфилд - Qt Профессиональное программирование.
Офлайн
для новичка QTableWidget проще
#!-*-coding:utf8-*- from PyQt4 import Qt def on_find(): s = edit.text() rows = t.rowCount() cols = t.columnCount() for i in xrange(rows): for j in xrange(cols): txt = t.item(i,j).text() if txt.contains(s): t.setRowHidden(i,False) break else: t.setRowHidden(i,True) app = Qt.QApplication([]) w= Qt.QWidget() t = Qt.QTableWidget(w) t.setRowCount(3) t.setColumnCount(4) for i in xrange(3): for j in xrange(4): s= 'blabla' + str(i) + str(j) item = Qt.QTableWidgetItem() item.setText(s) t.setItem(i,j,item) t.setSortingEnabled(True) edit = Qt.QLineEdit() btnFind = Qt.QPushButton(u'Поиск',w) btnFind.clicked.connect(on_find) grid = Qt.QGridLayout(w) grid.addWidget(t,0,0,1,2) grid.addWidget(edit,1,0) grid.addWidget(btnFind,1,1) w.resize(500,300) w.move(0,0) w.show() app.exec_()
Отредактировано vic57 (Март 14, 2016 15:54:34)
Офлайн
0
<для новичка QTableWidget проще>
да проще, но я читал что он тормозит при большой таблице и много памяти требует. А у меня большая таблица. И QTableView все равно тормозит. Видимо я что-то не дописал в своем коде. Или неправильно написал.
Прохоренок читал, нет примеров, просто теория.
Офлайн
186
vic57 Ты бы сначала ООП выучал и только потом что-то писать пытался.
> Прохоренок Н.А. погугли. PyQt там доступно описано
Это отвратительная книга. Ничего хорошего кроме тупого перевода документации в ней нет.
> Видимо я что-то не дописал в своем коде. Или неправильно написал.
Вкладывай код ещё раз. Посмотрю что там может быть не так.
Офлайн
0
код тот же, ничего нового не придумал
'''
Created on 8 марта 2016 г.
import sys
from PyQt5.QtCore import QAbstractTableModel, Qt, QSortFilterProxyModel, QVariant
from PyQt5.QtWidgets import QMainWindow, QTableView, QApplication
from dbf.ver_33 import Table
class Model(QAbstractTableModel):
def __init__(self, parent):
QAbstractTableModel.__init__(self)
self.gui = parent
def rowCount(self, parent):
return 10000
def columnCount(self, parent):
return 10
def data(self, index, role):
db = Table(r“E:\NOMEN”)
db.open()
if not index.isValid():
return 11
if role == Qt.DisplayRole:
row = index.row()
col = index.column()
if row in range(10000):
if col == 0:
return row
if col == 1:
return db.naimn
db.close()
def headerData(self, section, orientation, role):
if orientation == Qt.Vertical and role == Qt.DisplayRole:
return “Заголовок №1”
return QVariant()
class MainWindow(QMainWindow):
def __init__(self, parent):
QMainWindow.__init__(self, parent)
self.table = QTableView(self)
self.model = Model(self.table)
self.table.setModel(self.model)
self.setCentralWidget(self.table)
class App(QApplication):
def __init__(self, argv):
QApplication.__init__(self, argv)
self.ui = MainWindow(None)
self.ui.show()
if __name__ == “__main__”:
app = App(sys.argv)
sys.exit(app.exec_())
Офлайн
0
извиняюсь
Created on 8 марта 2016 г. import sys from PyQt5.QtCore import QAbstractTableModel, Qt, QSortFilterProxyModel, QVariant from PyQt5.QtWidgets import QMainWindow, QTableView, QApplication from dbf.ver_33 import Table class Model(QAbstractTableModel): def __init__(self, parent): QAbstractTableModel.__init__(self) self.gui = parent def rowCount(self, parent): return 10000 def columnCount(self, parent): return 10 def data(self, index, role): db = Table(r“E:\NOMEN”) db.open() if not index.isValid(): return 11 if role == Qt.DisplayRole: row = index.row() col = index.column() if row in range(10000): if col == 0: return row if col == 1: return db.naimn db.close() def headerData(self, section, orientation, role): if orientation == Qt.Vertical and role == Qt.DisplayRole: return “Заголовок №1” return QVariant() class MainWindow(QMainWindow): def __init__(self, parent): QMainWindow.__init__(self, parent) self.table = QTableView(self) self.model = Model(self.table) self.table.setModel(self.model) self.setCentralWidget(self.table) class App(QApplication): def __init__(self, argv): QApplication.__init__(self, argv) self.ui = MainWindow(None) self.ui.show() if __name__ == “__main__”: app = App(sys.argv) sys.exit(app.exec_())
Офлайн
0
если не трудно на 4 странице гляньте, я его выкладывал )
ПОЖАЛУЙСТА
Офлайн
186
> код тот же, ничего нового не придумал
Ну тогда попробую объяснить. Вот в чём твоя проблема:
def data(self, index, role): db = Table(r"E:\NOMEN") db.open() if not index.isValid(): return 11 if role == Qt.DisplayRole: row = index.row() col = index.column() if row in range(10000): if col == 0: return row if col == 1: return db[row].naimn db.close()
Отредактировано Rodegast (Март 15, 2016 19:36:41)
Офлайн
0
я думал один раз загрузится и база закроется.
Тогда в чем преимущество модели.
Офлайн