Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2009 14:27:41

rei
От:
Зарегистрирован: 2009-10-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по сигналам и слотам

Всем доброго времени суток. У меня возникла проблема с сабжем. Наверное просто что-то не так понял по этой теме.
Есть код:

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys, os
from mainwindow_ui import *
class mainwindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self)


self.setupUi(self)

self.connect(self.leftListWidget, QtCore.SIGNAL('doubleClicked(QModelIndex)'), self, QtCore.SLOT('itemClicked(item)'))

self.connect(self.exitButton, QtCore.SIGNAL('clicked()'), self.exitAction)
self.updateLeftList(os.path.expanduser("~"))
self.updateRightList(os.path.expanduser("~"))
def updateLeftList(self, directory):
files = os.listdir(directory)
for f in files:
self.leftListWidget.addItem(f)

def updateRightList(self, directory):
files = os.listdir(directory)
for f in files:
self.rightListWidget.addItem(f)

def itemClicked(self, item):
messageBox = QMessageBox(self)
messageBox.setText("Hello")
messageBox.show()

def exitAction(self):
self.close()
Не могу понять, почему двойной клик по элементу в списке не показывает сообщение.



Офлайн

#2 Окт. 14, 2009 17:35:15

Митрич
От:
Зарегистрирован: 2009-03-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по сигналам и слотам

Ну это очень просто…
дело в том, что метод itemClicked(self, item) не является слотом этого объекта. чтобы все работало надо написать:
self.connect(self.leftListWidget, QtCore.SIGNAL('doubleClicked(QModelIndex)'), self.itemClicked)
ну и помнить, что вместо item метод получит объект класса QModelIndex, его можно внутри метода превратить в item.



Офлайн

#3 Окт. 14, 2009 17:58:33

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

Вопрос по сигналам и слотам

Рекомендую освоить новый способ соединения слотов-сигналов. В данном случае вот так:

self.leftListWidget.doubleClicked.connect(self.itemClicked)



Офлайн

#4 Окт. 14, 2009 18:05:12

rei
От:
Зарегистрирован: 2009-10-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по сигналам и слотам

Спасибо, все работает.



Офлайн

#5 Окт. 14, 2009 18:07:08

rei
От:
Зарегистрирован: 2009-10-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по сигналам и слотам

pasaranax
Рекомендую освоить новый способ соединения слотов-сигналов. В данном случае вот так:
self.leftListWidget.doubleClicked.connect(self.itemClicked)
В таком случае метод itemClicked тоже получит QModelIndex в качестве параметра?



Офлайн

#6 Окт. 14, 2009 19:12:27

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

Вопрос по сигналам и слотам

rei
В таком случае метод itemClicked тоже получит QModelIndex в качестве параметра?
Да, результат аналогичен старому способу, просто “параметры” не указываются.



Отредактировано (Окт. 14, 2009 19:12:46)

Офлайн

#7 Окт. 14, 2009 20:40:50

Митрич
От:
Зарегистрирован: 2009-03-19
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по сигналам и слотам

а это self.leftListWidget.doubleClicked.connect с какой версии работает?



Офлайн

#8 Окт. 14, 2009 20:44:24

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

Вопрос по сигналам и слотам

Митрич
а это self.leftListWidget.doubleClicked.connect с какой версии работает?
с 4.5, забыл сказать



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version