Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пытон от Январь 13, 2012, 10:58



Название: Как просто показать картинку на форме???
Отправлено: Пытон от Январь 13, 2012, 10:58
Код
Python
from PyQt4 import QtGui, QtCore
import sys
 
 
class form(QtGui.QWidget):
   def __init__(self, parent = None):
       QtGui.QWidget.__init__(self, parent)
       self.pic = QtGui.QImage("С:\1.jpg")
 
 
if __name__ == '__main__':
   app = QtGui.QApplication(sys.argv)
   f = form()
   f.show()
   sys.exit(app.exec_())
 
 

И чего дальше? Картинка не появляется.


Название: Re: Как просто показать картинку на форме???
Отправлено: GreatSnake от Январь 13, 2012, 11:15
А разве в питоне обратный слэш дублировать не нужно?


Название: Re: Как просто показать картинку на форме???
Отправлено: iroln от Январь 13, 2012, 11:27
Слэш дублировать нужно - это во-первых.
Во-вторых, с какого фига эта картинка (self.pic) должна показаться на форме? Рисовать можно только в методе paintEvent. Картинку надо рисовать методом painter.drawImage

Код
Python
class Some(QWidget):
   def paintEvent(self, event):
       painter = QPainter(self)
       painter.drawImage(0, 0, self.pic)
 


Название: Re: Как просто показать картинку на форме???
Отправлено: Пытон от Январь 13, 2012, 13:20
спасибо


Название: Re: Как просто показать картинку на форме???
Отправлено: Пытон от Январь 13, 2012, 15:08
Блин! А как теперь эту картинку в контейнер засунуть? Имею ввиду QHBoxLayout.


Название: Re: Как просто показать картинку на форме???
Отправлено: iroln от Январь 13, 2012, 15:43
В компоновщик надо засовывать не картинку, а виджет на котором рисуешь. paintEvent определяешь соответственно в том самом виджете, который засовываешь в компоновщик.

По-хорошему надо делать так:
1. Создаёшь пользовательский виджет на основе QWidget (например, называешь его MyImageView).
2. Определяешь у этого виджета API (сигналы, слоты)
3. Используешь этот виджет как обычный Qt-виджет, пихаешь его в компоновщик и т.д.


Название: Re: Как просто показать картинку на форме???
Отправлено: Пытон от Январь 13, 2012, 17:31
Создавать новый класс, чтобы просто расположить на форме картинку?????  :o


Название: Re: Как просто показать картинку на форме???
Отправлено: mutineer от Январь 13, 2012, 17:40
Может расположить на форме QLabel, а ей уже отдать QPixmap или QPicture с картинкой?


Название: Re: Как просто показать картинку на форме???
Отправлено: iroln от Январь 13, 2012, 17:49
Создавать новый класс, чтобы просто расположить на форме картинку?????  :o
Смотря что ты делаешь. Если вьювер, то естественно. Если тебе просто какая-то картинка на форме нужна, используй QLabel, как уже сказали.


Название: Re: Как просто показать картинку на форме???
Отправлено: Пытон от Январь 13, 2012, 17:53
Вот что я сделал:

Код
Python
MyImgLabel = QtGui.QLabel()
MyImgLabel.setPixmap(QtGui.QPixmap("picture.jpg"))
MyLayout.addWidget(MyImgLabel)
 

Полностью выглядит так:
Код
Python
from PyQt4 import QtGui, QtCore
import sys
 
 
class form(QtGui.QWidget):
   def __init__(self, parent = None):
       QtGui.QWidget.__init__(self, parent)
       # создаём метку-надпись
       MyImgLabel = QtGui.QLabel()
       # засовываем в неё картинку
       MyImgLabel.setPixmap(QtGui.QPixmap("picture.jpg"))
 
       # создаём компоновщик (по-моему контейнер)
       MyLayout = QtGui.QHBoxLayout()
       # засовываем в контейнер метку с "сидящей" в ней картинкой
       MyLayout.addWidget(MyImgLabel)
       # указываем его как основной для нашей формы
       self.setLayout(MyLayout)
 
 
if __name__ == '__main__':
   app = QtGui.QApplication(sys.argv)
   f = form()
   f.show()
   sys.exit(app.exec_())
 

И усё, что мне требовалось!  ;)


Название: Re: Как просто показать картинку на форме???
Отправлено: Пытон от Январь 13, 2012, 17:56
Блин! Получилось, типа я такой умный, типа сам догадался!   ;D
Просто, уважаемые, пока я писал своё сообщение, вы успели свои написать с аналогичным же предложением.