2017-02-09 3 views
0

Я пишу QtWidget, который отображает QComboBox (выпадающее меню) с помощью PyQt5. Тем не менее, он становится пустым. Кто-нибудь знает, почему?QtWidget, отображающий QComboBox, пуст

import sys 
from PyQt5 import QtCore, QtGui, QtWidgets 

class Test(QtWidgets.QWidget): 
    def __init__(self, formname = "Test"): 
     super().__init__() 
     self.formname = formname 
     self.impute_methods = ["Method 1", "Method 2"] 

    def setupUi(self, Form): 
     Form.setObjectName(self.formname) 
     Form.resize(1154, 902) 
     self._create_buttons(Form) 
     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def _create_buttons(self, Form): 
     self.test_box = QtWidgets.QComboBox() 
     self.test_box.addItems(self.impute_methods) 
     self.test_box.setGeometry(QtCore.QRect(110, 190, 150, 27)) 
     self.test_box.setObjectName("test_box") 

    def selectionchange(self, i): 
     print(i) 

    def retranslateUi(self, Form): 
     _translate = QtCore.QCoreApplication.translate 
     Form.setWindowTitle(_translate(self.formname, "Test")) 

if __name__ == "__main__": 
    app = QtWidgets.QApplication(sys.argv) 
    tester = QtWidgets.QDialog() 
    ui = Test() 
    ui.setupUi(tester) 
    tester.show() 
    sys.exit(app.exec_()) 

Вот скриншот того, что я вижу:

enter image description here

+0

Потому что вы не использовали макет. – ekhumoro

+0

Не могли бы вы рассказать об этом немного, возможно, в комментариях? Благодарю. – Alex

+0

'layout = QtWidgets.QVBoxLayout (self); layout.addWidget (self.test_box) '. [Управление макетами] (https://doc.qt.io/qt-4.8/layout.html). – ekhumoro

ответ

0

набор родителя для COMBOBOX, чтобы поместить его на Test():

def _create_buttons(self, Form): 
    self.test_box = QtWidgets.QComboBox(self) 
    ... 

и щ, чтобы поместить его на Диалог:

... 
ui = Test() 
ui.setParent(tester) 
...