Уведомления

Группа в Telegram: @pythonsu

#1 Март 18, 2010 10:01:56

del3d
От:
Зарегистрирован: 2010-03-12
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + MySQL + Qt = MVC

Здравствуйте..
Пытаюсь вникнуть в модель MVC. Тренируюсь на приложении для работы с бд с PyQt интерфейсом.
Создал 3 класса (model, controller, view)

import sys
import view
import model
from PyQt4 import QtGui

class myContr():
def __init__(self):
pass

def createView(self):
myview = view.myView()
return myview

def createModel(self):
mymodel = model.myModel()
return mymodel

if __name__ == "__main__":
# создание объекта приложения
app = QtGui.QApplication(sys.argv)

# создание контроллера
contr = myContr()
# создание представления
view = contr.createView()
# создание модели
model = contr.createModel()

# запуск цикла обработки событий
sys.exit(app.exec_())
Вопрос: привильно ли вообще копать начал или может лучше view и model сделать атрибутами класса controller?



Офлайн

#2 Март 18, 2010 11:21:31

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + MySQL + Qt = MVC

Задачу надо практическую, а не абстрактную, тогда и видно будет.



Офлайн

#3 Март 18, 2010 12:34:40

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Python + MySQL + Qt = MVC

Обычно, всё-таки, контроллер должен знать про вью и модель.
Опять же – вью должна знать про модель.

Подумай, как организовать классическую схему



Офлайн

#4 Март 18, 2010 14:34:47

del3d
От:
Зарегистрирован: 2010-03-12
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + MySQL + Qt = MVC

Не могу понять как организовать взаимодействие между классами..
В мануале говорится, что на действия пользователя должен не реагировать Controller, но пользователь то взаимодействует с интерфейсом (View). Не легче объединить View и Controller?



Офлайн

#5 Март 19, 2010 21:34:47

villager
От:
Зарегистрирован: 2008-11-04
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + MySQL + Qt = MVC

вот примерчик

# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def main():
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())

class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)

# create table
table = self.createTable()


# layout
layout = QVBoxLayout()
layout.addWidget(table)
self.setLayout(layout)


def createTable(self):
# create the view
tv = QTableView()

# set the table model
tm = MyTableModel(self)
tv.setModel(tm)

# set the minimum size
tv.setMinimumSize(400, 300)
# hide gridnt()
#tv.setShowGrid(False)

# set the font
font = QFont("Courier New", 8)
tv.setFont(font)

# hide vertical header
vh = tv.verticalHeader()
vh.setVisible(False)

# tv.sizeHintForRow(101)


# set horizontal header properties
hh = tv.horizontalHeader()
hh.setStretchLastSection(True)

# set column width to fit contents
# tv.resizeColumnsToContents()
# set row height
# nrows = tm.rowCount(self)
# for row in xrange(nrows):
# tv.setRowHeight(row, 15)
return tv

class MyTableModel(QAbstractTableModel):
def __init__(self, parent=None, *args):
QAbstractTableModel.__init__(self, parent, *args)

def rowCount(self, parent):
#кол-во строк
return 1000000

def columnCount(self, parent):
#кол-во колонок
return 4

def data(self, index, role):
##тут фунция вытягивания данных
if not index.isValid():
return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
## для отладки-можно видеть обращения к функции

# print QString(u"клетка ")+str(index.row())+"-"+str(index.column())
return QVariant(QString(u"клетка ")+str(index.row())+"-"+str(index.column()))

def headerData(self, col, orientation, role):
## тут задаются заголовки
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return QVariant(QString(u"Колонка ")+str(col))
return QVariant()

if __name__ == "__main__":
main()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version