crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в соеденение древа и таблици
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 14.5.2012, 10:30
 
М
Lunt, учимся пользоваться тегом CODE!!!
Гость Дата 11.5.2012, 21:51
  А ну в принципе мои телепатические способности похоже под вечер возвросли, тебе нужно получить у QTreView'a его selection model, a дальше уже смотреть какой из её сигналов тебе будет удобней обрабатывать.
Гость Дата 11.5.2012, 21:40
  Так то тег code есть, да и вряд ли вся программа нужна, скорее всего не корректно работает та функция которая отвечает за выгрузку части данных из одной модели и загрузку в другую.
Lunt Дата 11.5.2012, 18:59
 
# -*- coding: cp1251 -*-
'''
Created on 27.10.2011

@author: ALEX
'''

import sys
from PyQt4 import QtGui, QtCore


class drevo(QtGui.QMainWindow):
    def __init__ (self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.move(300, 300)
        tree = QtGui.QTreeWidget(self)
        self.cw = QtGui.QWidget(self)
        QtGui.QHBoxLayout(self.cw)
        self.setCentralWidget(self.cw)
        self.centralWidget().layout().addWidget(tree)
        tree.setColumnCount(2)

тут я создал древо
#заголовки 1 и 2 столбцов
        tree.headerItem().setData(0, QtCore.Qt.DisplayRole, QtCore.QVariant(u'1'))
        tree.headerItem().setData(1, QtCore.Qt.DisplayRole, QtCore.QVariant(u'2'))
# заполнение дерева данными, верхний уровень:
        item = self.createItem(u'переславль', 'sity')
        tree.addTopLevelItem(item)
        item2 = self.createItem(u'ярославль', 'sity')
        tree.addTopLevelItem(item2)
# заполнение дерева данными, второй уровень:
        item.addChild(self.createItem(u'1152', 'osnovan'))
        item2.addChild(self.createItem(u'основан 1221', ''))
# заполнение дерева данными, третий уровень:
        item.child(0).addChild(self.createItem(u'долгорукий', 'kto osnoval'))
        item2.child(0).addChild(self.createItem(u'хw3з', ''))
        


тут я создал таблицу
        self.qwq = QtGui.QTableWidget()                           # создаем табличный виджет
        self.centralWidget().layout().addWidget(self.qwq) # выложили виджет
        self.qwq.setRowCount(1)                                       # задали кол-во строк
        self.qwq.setColumnCount(1)                                  # столбцов
        #self.qwq.setColumnHidden(0,True)                      # спрятали первую колонку
        self.show()                                                             # показываем окно

тут надо написать метод connect только я хз как... как я понял надо то место куда ты ткнеш мышкой в древе, чтоб автоматически отобразилось в таблице... например ткнул на ярославль - отобразился ярославль

    def createItem(self, first, second):
        item = QtGui.QTreeWidgetItem()
        item.setData(0, QtCore.Qt.DisplayRole, QtCore.QVariant(first))
        item.setData(1, QtCore.Qt.DisplayRole, QtCore.QVariant(second))
        return item
        
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win = drevo()
    win.show()
    sys.exit(app.exec_())
Гость Дата 11.5.2012, 17:41
  Разбираться в твоих каракулях, да ещё и без нормального редактирования лень, но здесь есть 2 статьи про то как можно разбивать/объединять модели, получая более удобное представление, с помощью прокси моделей. На мой взгляд это самый правильный и реюзабельный способ из тех что я видел. Бонус использования в том, что например получение под таблицы из дерева, можно заимплементить 1 раз, и так что в любой ситуации когда понадобится подобный функционал, можно просто использовать уже готовую прокси модель, да и кода написать придется если не меньше, то точно уж не больше чем в том варианте который ты хочешь реализовать, а производительность решения потенциально выше, т.к. копирования данных в данной ситуации ты избегаешь.
Ну это всё верно конечно, если в PyQt можно создать наследника QAbstractProxyModel, хотя при большом желании наверняка можно сделать наследника на c++ и дальше уже использовать из Python кода.
Lunt Дата 11.5.2012, 16:16
  народ помогите, совсем сил нету...
я написал прогу, в ней слева древо классов справа таблица, мне надо сделать так чтобы при нажатии мышкой на элемент в древе, в таблице появился этот элемент...
заранее спасибо

вот код проги:
# -*- coding: cp1251 -*-
'''
Created on 27.10.2011

@author: ALEX
'''

import sys
from PyQt4 import QtGui, QtCore


class drevo(QtGui.QMainWindow):
    def __init__ (self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.move(300, 300)
        tree = QtGui.QTreeWidget(self)
#        self.setCentralWidget(tree)
        self.cw = QtGui.QWidget(self)
        QtGui.QHBoxLayout(self.cw)
        self.setCentralWidget(self.cw)
#        self.setCentralWidget(QtGui.QWidget())
        self.centralWidget().layout().addWidget(tree)
        tree.setColumnCount(2)
        #заголовки 1 и 2 столбцов
        tree.headerItem().setData(0, QtCore.Qt.DisplayRole, QtCore.QVariant(u'1'))
        tree.headerItem().setData(1, QtCore.Qt.DisplayRole, QtCore.QVariant(u'2'))
        # заполнение дерева данными, верхний уровень:
        item = self.createItem(u'переславль', 'sity')
        tree.addTopLevelItem(item)
        item2 = self.createItem(u'ярославль', 'sity')
        tree.addTopLevelItem(item2)
        # заполнение дерева данными, второй уровень:
        item.addChild(self.createItem(u'1152', 'osnovan'))
        item2.addChild(self.createItem(u'основан 1221', ''))
        # заполнение дерева данными, третий уровень:
        item.child(0).addChild(self.createItem(u'долгорукий', 'kto osnoval'))
        item2.child(0).addChild(self.createItem(u'хw3з', ''))
        
#        self.mw = QtGui.QMainWindow() # создаем главное окно
#        self.mw.setWindowTitle('qwe') # ставим заголовок
#        self.mw.setCentralWidget(QtGui.QWidget()) # ставим "центральный виджет"
#        self.mw.centralWidget().setLayout(QtGui.QHBoxLayout()) # обращаемся к центральному виджету и задаем ему лэйаут
        self.qwq = QtGui.QTableWidget() # создаем табличный виджет
        self.centralWidget().layout().addWidget(self.qwq) # выложили виджет
        self.qwq.setRowCount(1) # задали кол-во строк
        self.qwq.setColumnCount(1) # столбцов
        #self.qwq.setColumnHidden(0,True) # спрятали первую колонку
        self.show() # показываем окно
        
        
        
        b = QtGui.QPushButton('klick') # создали кнопку
        self.centralWidget().layout().addWidget(B) # обращаемся к лэйауту виджета - добавляем виджет - нашу кнопку
        QtCore.QObject.connect(b,QtCore.SIGNAL('clicked()'),self.klick) # соединяем сигнал "clicked()" с методом klick
        
    def klick(self):
        try: # обработка исключений
            print self.text() # берем text() из элемента грида 1,1 и печатаем его
        except: # в случае всех ошибок
            print 'Не создан элемент' # ругаемся
        #показывание что на писано в 1 и 2 столбцах
    def createItem(self, first, second):
        item = QtGui.QTreeWidgetItem()
        item.setData(0, QtCore.Qt.DisplayRole, QtCore.QVariant(first))
        item.setData(1, QtCore.Qt.DisplayRole, QtCore.QVariant(second))
        return item
        
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win = drevo()
    win.show()
    sys.exit(app.exec_())
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 14:51