将组合框添加到主窗口

时间:2017-12-09 16:42:25

标签: python pyqt5 qcombobox qmainwindow

我用pyqt5创建了一个带有2个按钮的主窗口,现在我想添加一个组合框。但如果我保留App(QMainWindow),组合框就不会显示。只有我写App(QWidgets)才会显示。有没有办法在主窗口中添加组合框?这是我的代码:

class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'Phan mem quan ly tai lieu- Tuan tien mom'
        self.left = 200
        self.top = 200
        self.width = 320
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button = QPushButton('chaychuongtrinh', self)
        button.setToolTip('bam vao nut nay de chay chuong trinh')
        button.move(100, 70)
        button.clicked.connect(self.on_click)

        button1 = QPushButton('kiemtra', self)
        button1.setToolTip('kiem tra thong tin')
        button1.move(200, 70)
        button1.clicked.connect(self.on_click)

        layout = QHBoxLayout()
        self.cb = QComboBox()
        self.cb.addItem("C")
        self.cb.addItem("C++")
        self.cb.addItems(["Java", "C#", "Python"])
        self.cb.currentIndexChanged.connect(self.selectionchange)
        layout.addWidget(self.cb)
        self.setLayout(layout)
        self.setWindowTitle("combo box demo")
        self.show()
    def selectionchange(self,i):
        print ("Items in the list are :")
        print(self.cb.currentText())

2 个答案:

答案 0 :(得分:0)

每个小部件都需要parent

对于QPushButton,您使用self作为父级。对于QComboBox使用self作为父级

self.cb = QComboBox(self)

答案 1 :(得分:0)

QMainWindow是一个特殊的小部件,它已经有了一个布局,所以我们不应该添加另一个布局,如图所示:

enter image description here

在这种情况下,您必须创建一个新窗口小部件并将其放在中央窗口小部件中,在这个新窗口小部件中,我们必须将窗口小部件放置为QPushButton或QComboBox。

在您的情况下,QPushButton是可见的,因为如果窗口小部件传递了父窗口,它将位于父窗口的位置(0,0),然后您已将其移动到具有{的特定位置{1}}。相反,组合框没有父母,所以它不可见。

此外,如果您要使用布局,则不应使用move()函数,因为布局将在整个窗口小部件中展开。在以下示例中,不使用布局:

move()

enter image description here

布局:

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)
    self.widget = QWidget(self)
    self.setCentralWidget(self.widget)
    button = QPushButton('chaychuongtrinh', self.widget)
    button.move(100, 70)
    button.setToolTip('bam vao nut nay de chay chuong trinh')
    button.clicked.connect(self.on_click)
    button1 = QPushButton('kiemtra', self.widget)
    button1.setToolTip('kiem tra thong tin')
    button1.clicked.connect(self.on_click)
    button1.move(200, 70)
    self.cb = QComboBox(self.widget)
    self.cb.addItem("C")
    self.cb.addItem("C++")
    self.cb.addItems(["Java", "C#", "Python"])
    self.cb.currentIndexChanged.connect(self.selectionchange)
    self.cb.move(300, 70)
    self.setWindowTitle("combo box demo")

enter image description here