2012-08-17 5 views
1

pyside GUI에서 빈 QImage 위젯을 초기화하려고하지만 오류가 발생하고 문서에서 수행해야하는 작업을 파악할 수 없습니다. 수행해야 할 작업을 알 수 있습니까?pyside가있는 빈 QImage를 초기화하십시오.

import sys 
from PySide import QtGui, QtCore 
import os 

class ms_ImageViewer(QtGui.QWidget): 

    def __init__(self): 
     super(ms_ImageViewer, self).__init__() 
     self.initUI() 

    def initUI(self):    

     main_layout = QtGui.QVBoxLayout() 
     self.setLayout(main_layout) 

     self.image = QtGui.QImage(50, 50, QtGui.QImage.Format_Indexed8) 
     self.image.fill(QtGui.qRgb(50,50,50)) 
     button = QtGui.QPushButton('select file', self) 
     main_layout.addWidget(button) 
     main_layout.addWidget(self.image) 

     self.setGeometry(300, 300, 600, 30) 
     self.setWindowTitle('ms_image_viewer')  
     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = ms_ImageViewer() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

작업이 QImage 위젯을 받으세요 여기에 오류가 내가 얻을입니다합니다 :

/projects/Mayaseed/src/tools/ms_image_viewer.py 
    Traceback (most recent call last): 
     File "/projects/Mayaseed/src/tools/ms_image_viewer.py", line 34, in <module> 
     main() 
     File "/projects/Mayaseed/src/tools/ms_image_viewer.py", line 29, in main 
     ex = ms_ImageViewer() 
     File "/projects/Mayaseed/src/tools/ms_image_viewer.py", line 9, in __init__ 
     self.initUI() 
     File "/projects/Mayaseed/src/tools/ms_image_viewer.py", line 20, in initUI 
     main_layout.addWidget(self.image) 
    TypeError: 'PySide.QtGui.QBoxLayout.addWidget' called with wrong argument types: 
     PySide.QtGui.QBoxLayout.addWidget(PySide.QtGui.QImage) 
    Supported signatures: 
     PySide.QtGui.QBoxLayout.addWidget(PySide.QtGui.QWidget, int = 0, PySide.QtCore.Qt.Alignment = 0) 

답변

1

편집 :이 답변을 제공 할 때, 문제는 지금과는 다른 하나는 ...이었다

fill은 QColor 요소 대신 int 인수를 필요로합니다.

사용

self.image.fill(qRgb(50,50,50)) 

대신

self.image.fill(QtGui.QColor(50,50,50)) 

의 난이 정확히 C++에서와 같이 pyside에 동일하게 작동 바랍니다. 여기에 문서가 있습니다 : http://doc.qt.nokia.com/4.7-snapshot/qcolor.html#qRgb

+0

덕분에 나는 위의 예에서 해당 오류를 수정하지만이는 QWidget 아니기 때문에 난, 당신은 레이아웃에 QImage를 추가 할 수 없습니다 –

+0

레이아웃에 Qimage을 추가하는 오류가 발생합니다. 다시 한번 pyside에서 같은 방식으로 작동하길 바랍니다. 이미지를 QLabel로 설정 한 다음 QLabel을 레이아웃에 추가 할 수 있습니다. – Misch

+0

다시 한 번! QLabel 내부에서 재생하면 표시됩니다. 유일한 문제는 정크 색상 값 표시 중 ... QtGui.qRgb (255,0,0)이 올바르게 작동하지 않는 것 같습니다. –

0

주요한 문제는 QImage가 위젯이 아니므로 레이아웃에 추가 할 수 없다는 것입니다. 다음은 Qimage를 빨간색 배경으로 초기화하고 QLabel 위젯 안에 배치하는 코드입니다. 알파, 레드, 그린 및 블루에 대한 4 x 8 비트 값으로 이미지가 포맷되도록 이미지 형식을 ARGB32로 변경합니다.

import sys 
from PySide import QtGui, QtCore 
import os 

class ms_ImageViewer(QtGui.QWidget): 

    def __init__(self): 
     super(ms_ImageViewer, self).__init__() 
     self.initUI() 

    def initUI(self):    

     main_layout = QtGui.QVBoxLayout() 
     self.setLayout(main_layout) 

     self.image = QtGui.QImage(100, 150, QtGui.QImage.Format_ARGB32) 
     intial_color = QtGui.qRgb(189, 149, 39) 
     self.image.fill(QtGui.qRgb(255,0,0)) 
     # self.image.load('/projects/test.png') 
     image_label = QtGui.QLabel(" ") 
     image_label.setPixmap(QtGui.QPixmap.fromImage(self.image)) 
     button = QtGui.QPushButton('select file', self) 
     main_layout.addWidget(button) 
     main_layout.addWidget(image_label) 

     self.setGeometry(300, 300, 600, 30) 
     self.setWindowTitle('ms_image_viewer')  
     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = ms_ImageViewer() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+1

왜 QString이 아닌 라벨 텍스트를'' "로 설정합니까? – leemes

관련 문제