여러 표준 파이 사이드 위젯을 새로운 위젯 ('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()
감사합니다. 도움이되었습니다. Raster에서 레이아웃을 추가하면 모든 것이 잘 동작합니다. – lengxuehx