Найти - Пользователи
Полная версия: PyQt. Сигналы QListWidget и др.
Начало » GUI » PyQt. Сигналы QListWidget и др.
1
basist
Здравствуйте, помогите пожалуйста с таким вопросом:

есть 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)"))
то не происходит ровным счетом ничего.
Подскажите, что я делаю не так?
Большое спасибо))
Studentik
про 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)
basist
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))
скажите, что и где я не так сделал?
Studentik
учите мат. часть. unexpected indent - это отступ где-то неправильный. И не надо в аргумент функции item подсовывать слово int, что в питоне означает тип int - туда надо подсовывать номер строчки.
basist
Спасибо))
Было бы по чему учить.. на русском все “учебники” ограничиваются мегапрогами типа Hello World..
изучаю потихоньку Rapid GUI Programming with Python and Qt..
Levitan
Доброго всем дня, недавно начал изучать 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_())
4kpt
Как это?
basist
Спасибо))Было бы по чему учить.. на русском все “учебники” ограничиваются мегапрогами типа Hello World.. изучаю потихоньку Rapid GUI Programming with Python and Qt..

А книга “Прохоренок Н.А. PyQt создание оконных приложений на Python3” Вас не устраивает???
Levitan
Сам спросил сам отвечаю:
Содержимое QListWidet и QStackedWidget объединяется сигнал слотом:
QtCore.QObject.connect(self.listWidget, QtCore.SIGNAL("currentRowChanged(int)"), self.stackedWidget, QtCore.SLOT("setCurrentIndex(int)"))
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