2015-01-06 3 views
-1

여러 표준 파이 사이드 위젯을 새로운 위젯 ('RasterWidget'이라는 사용자 정의 위젯)에 결합한 다음 RastersCrlWidget이라는 다른 위젯에 더 많은 사용자 정의 위젯을 표시하려고합니다. 그러나 이상하게도 응용 프로그램을 실행할 때 위젯은 부모 위젯에 나타나지 않습니다. 커스텀 위젯을 'QtGui.QPushButton'으로 변경하면 모든 것이 정상입니다. 또한 맞춤 위젯은 별도로 표시 할 때 잘 작동합니다 (다른 위젯에 넣지 마십시오). 내 사용자 정의 위젯이 표시되지 않는 동안 표준 'QtGui.QPushButton'이 표시 될 수 있는지 궁금합니다.내 pyside 맞춤 위젯이 상위 위젯에 표시되지 않는 이유는 무엇입니까?

from PySide import QtCore, QtGui 
import sys 

class RasterWidget(QtGui.QWidget): 

    def __init__(self): 
     super(RasterWidget, self).__init__() 
     self.ui = Ui_Raster() 
     self.ui.setupUi(self) 


class Ui_Raster(object): 
    def setupUi(self, Raster): 
     Raster.setObjectName("Raster") 
     Raster.resize(250, 212) 
     self.lcdNumber = QtGui.QLCDNumber(Raster) 
     self.lcdNumber.setGeometry(QtCore.QRect(70, 30, 101, 23)) 
     self.lcdNumber.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu) 
     self.lcdNumber.setObjectName("lcdNumber") 
     self.pushButton = QtGui.QPushButton(Raster) 
     self.pushButton.setGeometry(QtCore.QRect(20, 130, 93, 28)) 
     self.pushButton.setObjectName("pushButton") 
     self.label = QtGui.QLabel(Raster) 
     self.label.setGeometry(QtCore.QRect(20, 30, 72, 15)) 
     self.label.setObjectName("label") 
     self.label_2 = QtGui.QLabel(Raster) 
     self.label_2.setGeometry(QtCore.QRect(20, 70, 72, 15)) 
     self.label_2.setObjectName("label_2") 
     self.lineEdit = QtGui.QLineEdit(Raster) 
     self.lineEdit.setGeometry(QtCore.QRect(70, 70, 113, 21)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.pushButton_2 = QtGui.QPushButton(Raster) 
     self.pushButton_2.setGeometry(QtCore.QRect(120, 130, 93, 28)) 
     self.pushButton_2.setObjectName("pushButton_2") 

     self.retranslateUi(Raster) 
     QtCore.QMetaObject.connectSlotsByName(Raster) 

    def retranslateUi(self, Raster): 
     Raster.setWindowTitle(QtGui.QApplication.translate("Raster", "Raster", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton.setText(QtGui.QApplication.translate("Raster", "reset", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("Raster", "read", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_2.setText(QtGui.QApplication.translate("Raster", "ID", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton_2.setText(QtGui.QApplication.translate("Raster", "modify id", None, QtGui.QApplication.UnicodeUTF8)) 

class RastersCrlWidget(QtGui.QWidget): 

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

    def initUI(self): 
     raster1 = RasterWidget() 
     raster2 = RasterWidget() 

**#fine when use standard widget** 
#   okButton = QtGui.QPushButton("OK") 
#   cancelButton = QtGui.QPushButton("Cancel") 

     hbox = QtGui.QHBoxLayout() 
     hbox.addStretch(1) 
     hbox.addWidget(raster1) 
     hbox.addWidget(raster2) 

     vbox = QtGui.QVBoxLayout() 
     vbox.addStretch(1) 
     vbox.addLayout(hbox) 

     self.setLayout(vbox)  

     self.setGeometry(300, 300, 250, 150) 
     self.setWindowTitle('more rasters') 
     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = RastersCrlWidget() 
**# appear normally when show separately** 
#  ex = RasterWidget() 
#  ex.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

답변

0

RasterWidget에 대한 레이아웃이 없습니다. 레이아웃이 없으면 위젯은 크기 (minimumSize 등)를 계산할 수 없으므로 기본값을 사용하고 필요에 따라 (0, 0)으로 축소 할 수 있습니다. 또한 기본 레이아웃에 stretch을 추가하면 기본적으로 위젯이 축소되어 표시되지 않습니다.

즉, 레이아웃을 사용하십시오.

+0

감사합니다. 도움이되었습니다. Raster에서 레이아웃을 추가하면 모든 것이 잘 동작합니다. – lengxuehx

관련 문제