Katakanlah saya memiliki dua tombol, dalam tata letak horizontal, yang perlu saya tambahkan ke QMainWindow (pada dasarnya, aplikasi dengan bilah menu dan dua tombol di area utama).

Saya mencoba menerapkannya dengan cara ini

class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        # Menus
        exitAct = QAction(QIcon('exit.png'), '&Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('Exit application')
        exitAct.triggered.connect(qApp.quit)

        self.statusBar()

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAct)

        # central widget
        firstButton = QPushButton("first")
        secondButton = QPushButton("second")

        hbox = QHBoxLayout()
        hbox.addWidget(firstButton)
        hbox.addWidget(secondButton)

        # Not working because TypeError: setCentralWidget(self, QWidget): argument 1 has unexpected type 'QHBoxLayout'
        # self.setCentralWidget(hbox)

        # Not working because centralWidget is not set, therefore is null
        # self.centralWidget().setLayout(hbox)

        # Not working because this is a QMainWindow, and the top-level widget already has a layout containing the menu bar for instance
        self.setLayout(hbox)

        self.setGeometry(300, 300, 300, 190)
        self.setWindowTitle('Points')
        self.show()

Saya telah mendefinisikan dua tombol saya, membuat tata letak horizontal dan menambahkan tombol ke tata letak. Sekarang saya perlu memberi tahu jendela saya untuk menggunakan tata letak ini.

Namun, saya tidak dapat mengatur untuk menambahkan tata letak ke QMainWindow, karena QMainWindow sudah memiliki tata letak tingkat atas (antara lain untuk bilah menu).

Akibatnya, tombol saya tidak ditampilkan. Bagaimana saya bisa mencapai ini?

1
Overdrivr 20 Desember 2017, 11:22

1 menjawab

Jawaban Terbaik

Anda dapat membuat QWidget, menerapkan tata letak ke dalamnya, dan mengaturnya sebagai widget pusat:

centralWidget = QWidget()
centralWidget.setLayout(hbox)
self.setCentralWidget(centralWidget)
2
Mel 20 Desember 2017, 10:26