Найти - Пользователи
Полная версия: Вопрос по сигналам и слотам
Начало » GUI » Вопрос по сигналам и слотам
1
rei
Всем доброго времени суток. У меня возникла проблема с сабжем. Наверное просто что-то не так понял по этой теме.
Есть код:
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()
Не могу понять, почему двойной клик по элементу в списке не показывает сообщение.
Митрич
Ну это очень просто…
дело в том, что метод itemClicked(self, item) не является слотом этого объекта. чтобы все работало надо написать:
self.connect(self.leftListWidget, QtCore.SIGNAL('doubleClicked(QModelIndex)'), self.itemClicked)
ну и помнить, что вместо item метод получит объект класса QModelIndex, его можно внутри метода превратить в item.
pasaranax
Рекомендую освоить новый способ соединения слотов-сигналов. В данном случае вот так:
self.leftListWidget.doubleClicked.connect(self.itemClicked)
rei
Спасибо, все работает.
rei
pasaranax
Рекомендую освоить новый способ соединения слотов-сигналов. В данном случае вот так:
self.leftListWidget.doubleClicked.connect(self.itemClicked)
В таком случае метод itemClicked тоже получит QModelIndex в качестве параметра?
pasaranax
rei
В таком случае метод itemClicked тоже получит QModelIndex в качестве параметра?
Да, результат аналогичен старому способу, просто “параметры” не указываются.
Митрич
а это self.leftListWidget.doubleClicked.connect с какой версии работает?
pasaranax
Митрич
а это self.leftListWidget.doubleClicked.connect с какой версии работает?
с 4.5, забыл сказать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB