Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2011 00:44:28

basist
От:
Зарегистрирован: 2009-09-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Сигналы QListWidget и др.

Здравствуйте, помогите пожалуйста с таким вопросом:

есть QListWidget и сигнал. для начала currentRowChanged(int)

self.listView = QtGui.QListWidget(self.centralwidget)

...

QtCore.QObject.connect(self.ui.listView,QtCore.SIGNAL("currentRowChanged(int)"), self.print_id)

...

def print_id(self):
print(int)
Здесь всё работает, но печатает он не номер строки, а <type ‘int’>
Как сделать, чтобы было число?

идём далее. Сигнал itemDoubleClicked
если делать так:

QtCore.QObject.connect(self.ui.listView,QtCore.SIGNAL("itemDoubleClicked()"), self.print_id)
естественно не работает. В документации имеем:

void QListWidget::itemDoubleClicked ( QListWidgetItem * item )   [signal]

This signal is emitted with the specified item when a mouse button is double clicked on an item in the widget.
Это значит что сигналу нужно передавать какой-то аргумент? если да, то как правильно записать этот самый Item?.. Перепробовал уже многое, ничего не подходит..

И последнее:
В самом первом примере если задать слот напрямую label'а
QtCore.QObject.connect(self.ui.listView,QtCore.SIGNAL("currentRowChanged(int)"), self.ui.label, QtCore.SLOT("setText(int)"))
то не происходит ровным счетом ничего.
Подскажите, что я делаю не так?
Большое спасибо))



Офлайн

#2 Фев. 13, 2011 10:42:24

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

PyQt. Сигналы QListWidget и др.

про int:

def print_id(self, currentRow):
print(self.item(currentRow).text())
про doublickick
def mydoubleckickhandler(self, item):
print("Double ckicked")
self.ui.listview.itemDoubleCkicked.connect(mydoubleckickhandler)



Офлайн

#3 Фев. 13, 2011 12:15:20

basist
От:
Зарегистрирован: 2009-09-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Сигналы QListWidget и др.

Studentik
про doublickick
Это как ты такое провернул?)) и как это вообще называется? это вид связки слота и сигнала такой? т.е. сигнала и функции? а itemDoubleClicked в роли чего здесь выступает? в роли события?
у меня после
self.ui.listview.itemDoubleClicked.connect(mydoubleckickhandler)
говорит что “unexpected indent”

а в
def print_id(self, currentRow):
print(self.ui.listView.item(currentRow).text())
пишет что ошибка “QListWidget.item(int): argument 1 has unexpected type ‘type’”
Вызываю так:
QtCore.QObject.connect(self.ui.listView,QtCore.SIGNAL("currentRowChanged(int)"), self.print_id(int))
скажите, что и где я не так сделал?



Офлайн

#4 Фев. 13, 2011 13:25:14

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

PyQt. Сигналы QListWidget и др.

учите мат. часть. unexpected indent - это отступ где-то неправильный. И не надо в аргумент функции item подсовывать слово int, что в питоне означает тип int - туда надо подсовывать номер строчки.



Офлайн

#5 Фев. 13, 2011 13:39:27

basist
От:
Зарегистрирован: 2009-09-05
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Сигналы QListWidget и др.

Спасибо))
Было бы по чему учить.. на русском все “учебники” ограничиваются мегапрогами типа Hello World..
изучаю потихоньку Rapid GUI Programming with Python and Qt..



Отредактировано (Фев. 13, 2011 13:45:37)

Офлайн

#6 Ноя. 18, 2012 12:11:18

Levitan
Зарегистрирован: 2012-11-18
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Сигналы QListWidget и др.

Доброго всем дня, недавно начал изучать PyQt.
Сегодня упёрся в тупик с QListWiget. В общем мне надо что бы по нажатии на один из QListWigetItem - btn01 или btn02, справа отображался соответствующий импортируемый класс(виджет) для btn01 > wid01 и btn02 > wid02.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
import modules.pages
class Window(QtGui.QDialog):
  def __init__(self, *args):
    QtGui.QDialog.__init__(self, *args)
    
    # Импортируемые классы из pages.py
    wid01 = modules.pages.Widget01()
    wid02 = modules.pages.Widget02()
    # ListWiget
    listWidget = QtGui.QListWidget()
    listWidget.setViewMode(QtGui.QListView.IconMode)
    listWidget.setMaximumWidth(128)
    listWidget.setMovement(QtGui.QListView.Static)
    #Начинка ListWiget
    btn01 = QtGui.QListWidgetItem("Button #1", listWidget)
    btn02 = QtGui.QListWidgetItem("Button #2", listWidget)
    
    layout = QtGui.QHBoxLayout()
    layout.addWidget(listWidget)
    layout.addStretch()
    self.setLayout(layout)
if __name__=='__main__':
  app = QtGui.QApplication(sys.argv)
  wind = Window()
  wind.resize(400, 300)
  wind.show()
  sys.exit(app.exec_())

Отредактировано Levitan (Ноя. 18, 2012 12:12:49)

Офлайн

#7 Ноя. 18, 2012 13:41:11

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

PyQt. Сигналы QListWidget и др.

Как это?

basist
Спасибо))Было бы по чему учить.. на русском все “учебники” ограничиваются мегапрогами типа Hello World.. изучаю потихоньку Rapid GUI Programming with Python and Qt..

А книга “Прохоренок Н.А. PyQt создание оконных приложений на Python3” Вас не устраивает???



Отредактировано 4kpt (Ноя. 18, 2012 13:41:34)

Офлайн

#8 Ноя. 20, 2012 11:31:15

Levitan
Зарегистрирован: 2012-11-18
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt. Сигналы QListWidget и др.

Сам спросил сам отвечаю:
Содержимое QListWidet и QStackedWidget объединяется сигнал слотом:

QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL("currentRowChanged(int)"), self.stackedWidget, QtCore.SLOT("setCurrentIndex(int)"))

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version