Я использую PyQt4 для создания формы, которая отображает веб-изображение в отдельном окне с помощью Qlabel. Должно быть так, что нажатие кнопки в форме обновляет Qlabel новым изображением, считывая URL-адрес нового изображения из ячейки таблицы в форме.
Проблема, с которой я столкнулся, заключается в том, что я не понимаю, как создать Qlabel как объект класса, который я могу затем обновить, установив его свойство setPixmap(). Вот что я написал до сих пор:
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest
CAT_PICS = ["http://static.tumblr.com/ce35b04e242c6b8073f3ff7801147e9f/sz5wgey/obSmpcvso/tumblr_static_o-cats-kill-billions-facebook.jpg",
"http://jasonlefkowitz.net/wp-content/uploads/2013/07/cats-16140154-1920-1080.jpg",
"http://4.bp.blogspot.com/-MzZCzWI_6Xc/UIUQp1qPfzI/AAAAAAAAHpA/OTwHCJSWFAY/s1600/cats_animals_kittens_cat_kitten_cute_desktop_1680x1050_hd-wallpaper-753974.jpeg"]
class ImageLabel(QLabel):
def __init__(self, parent=None):
QLabel.__init__(self, parent)
url = self.text()
nam = QNetworkAccessManager()
def finishRequest(reply):
img = QImage()
img.loadFromData(reply.readAll())
myImage = QPixmap(img)
self.setFixedSize(myImage.size())
self.setPixmap(QPixmap(myImage))
nam.finished.connect(finishRequest)
nam.get(QNetworkRequest(QUrl(url)))
class MainForm(QDialog):
index = 0
def __init__(self):
super(MainForm, self).__init__()
changePhotoButton = QPushButton("Next Photo")
layout = QHBoxLayout()
layout.addWidget(changePhotoButton)
self.setLayout(layout)
self.connect(changePhotoButton, SIGNAL("clicked()"),
self.updatePhoto)
def updatePhoto(self):
url = CAT_PICS[self.index]
imageLabel = ImageLabel(url)
imageLabel.show()
self.index += 1
def main():
app = QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()
main()
Код будет работать, однако, когда вызывается класс ImageLabel, QLabel создается с исходным текстом из URL-адреса, но изображение никогда не извлекается, и Qlabel немедленно удаляется из поля зрения.
Я был бы признателен за любые советы о том, как заставить это работать.
nam.finished.connect(finishRequest)
иdef finishRequest(reply):
. - person wanyo   schedule 13.01.2014imageLabel = ImageLabel(url)
, тогда как класс ImageLabel не имеет такого параметра метода init... OT: main() as строка выглядит странно в питоне. - person lpapp   schedule 13.01.2014nam.finished.connect(finishRequest)
илиdef finishRequest(reply)
и пока не нашел четкого объяснения. - person wanyo   schedule 13.01.2014