Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QMainWindow+QTableWidget+Signals, Помогите разобраться в работе 
:(
    Опции темы
KelmDmitry
Дата 1.10.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.2.2011

Репутация: нет
Всего: нет



Добрый день, делаю небольшую курсовую работу и уже второй день пытаюсь разобраться почему не работает сигнал в таблице.

Вот код. 
Пару других классов я вырезал, они тут не нужны, кое-что не доделано, например РадиоБуттон и я об этом знаю =)

Код

#!/usr/bin/python
# -*- coding: utf-8 -*-

#Дана целочисленная матрица {Aij}i=1...n, j=1...m (n,mє[5..9]).
#Конкретный размер задается  главным меню (строки) и радионабором (столбцы).
#Если в матрице есть столбец, в котором элементы только положительные,
#то заменить в нем все значения на отрицательные, в про-тивном найти разность
#положительных и отрицательных элементов в матрице.
#Пароль - квадрат текущего номера дня недели.

import sys, datetime, random, string
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QObject

def main():
    app = QtGui.QApplication(sys.argv)
    mains = MainWindow()
    mains.show()
    sys.exit(app.exec_())  


class MainWindow(QtGui.QMainWindow):
    ## Class create window with table...
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setGeometry(300, 200, 500, 300)
        self.setWindowTitle(u'Курсовая работа 223  вариант')
        self.setWindowIcon(QtGui.QIcon('icon/1.jpg'))

        menu1 = QtGui.QAction(u'5 строк', self)
        menu1.setStatusTip(u'Таблица с 5 строками')
        menu2 = QtGui.QAction(u'6 строк', self)
        menu2.setStatusTip(u'Таблица с 6 строками')
        menu3 = QtGui.QAction(u'7 строк', self)
        menu3.setStatusTip(u'Таблица с 7 строками')
        menu4 = QtGui.QAction(u'8 строк', self)
        menu4.setStatusTip(u'Таблица с 8 строками')
        menu5 = QtGui.QAction(u'9 строк', self)
        menu5.setStatusTip(u'Таблица с 9 строками')

        self.statusBar()

        menubar = self.menuBar()
        firstmenu = menubar.addMenu(u'Количество строк')
        firstmenu.addAction(menu1)
        firstmenu.addAction(menu2)
        firstmenu.addAction(menu3)
        firstmenu.addAction(menu4)
        firstmenu.addAction(menu5)
        
        self.table = QtGui.QTableWidget(self)
        self.table.setGeometry(10, 32, 300, 250)
        self.table.clear()
        self.table.setColumnCount(5)
        self.table.setRowCount(5)
        item = QtGui.QTableWidgetItem(str(random.randint(-100,100)))
        self.table.setItem(0, 0, item)
        self.table.resizeRowsToContents()
        self.table.resizeColumnsToContents()

        radioGroup = QtGui.QGroupBox(u"Количество столбцов:")
        radio1 = QtGui.QRadioButton(u"Пять", radioGroup)
        radio2 = QtGui.QRadioButton(u"Шесть", radioGroup)
        radio3 = QtGui.QRadioButton(u"Семь", radioGroup)
        radio4 = QtGui.QRadioButton(u"Восемь", radioGroup)
        radio5 = QtGui.QRadioButton(u"Девять", radioGroup)
        radioGroup.move(400, 52)

        but = QtGui.QPushButton(u'Далее', self)
        but.move(320,32)

        #Action
        self.connect(but,  QtCore.SIGNAL('clicked()'), self.insertItems)
        self.connect(self.table, QtCore.SIGNAL('clicked()'), self.insertItems)
        

    def insertItems(self):
        ## Insert items in rows and columns
        item = QtGui.QTableWidgetItem(str(random.randint(-100,100)))
        self.table.setItem(0, 1, item)

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

if __name__ == "__main__": 
    main()



Так вот. Проблема в этой части кода (75 строчка):

Код

self.connect(self.table, QtCore.SIGNAL('clicked()'), self.insertItems)


Почему-то не хочет связываться таблица и метод.
Мое предположение что self.table является именем таблицы но не табл виджета. Поэтому все клики, изменения в виджете не ловятся. Но как правильно обратиться я так и не нашел (( Хотя может я не прав и ошибка в чем-то другом.

Есть идеи или может даже решение проблемы?


PM MAIL   Вверх
KelmDmitry
Дата 3.10.2011, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.2.2011

Репутация: нет
Всего: нет



Все еще буду благодарен за подсказку решения.
PM MAIL   Вверх
rsm
Дата 3.10.2011, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Хоть бы в Qt Assistant заглянул, ведь написано же, что у QTableWidget'ного сигнала `clicked()' есть аргумент! smile
PM MAIL   Вверх
KelmDmitry
Дата 3.10.2011, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.2.2011

Репутация: нет
Всего: нет



Хоть ты и злой Буратино, спасибо тебе.
Твоя подсказка мне помогла.

Для тех кто найдет эту тему через поиск, решение:
self.connect(self.table, QtCore.SIGNAL('clicked(QModelIndex)'), self.insertItems)
PM MAIL   Вверх
rsm
Дата 3.10.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(KelmDmitry @  3.10.2011,  20:58 Найти цитируемый пост)
Хоть ты и злой Буратино

Без этого (чтения документации) - никак smile Тем более, что Qt это не GTK какое-нибудь и документация у неё великолепная smile
PM MAIL   Вверх
KelmDmitry
Дата 3.10.2011, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.2.2011

Репутация: нет
Всего: нет



Да я понимаю, сейчас вот сижу опять втыкаю как сделать еще один момент в программе.
Только вот что б читать и ориентироваться в документации надо иметь английский не плохой, а он у меня слабенький. И без подсказки я бы искал, искал и искал....
PM MAIL   Вверх
rsm
Дата 3.10.2011, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: нет
Всего: 62



Цитата(KelmDmitry @  4.10.2011,  00:39 Найти цитируемый пост)
что б читать и ориентироваться в документации надо иметь английский не плохой

На этот случай существуют книжки, целых две (первая, вторая), которые базируются на и включают в себя изрядную часть официальной документации.
PM MAIL   Вверх
KelmDmitry
Дата 3.10.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.2.2011

Репутация: нет
Всего: нет



Спасибо за наводку.

п.с. - а книжки то не дешевые... совсем издатель о студентах не думает =)
PM MAIL   Вверх
Amp
Дата 4.10.2011, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



В последних версиях PyQt4 появился же нормальный способ привязки сигналов к слотам (без указания плюсовой сигнатуры) - http://www.riverbankcomputing.co.uk/static...nals_slots.html
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Разработка GUI | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.