Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Adding buttons to layout
Qt 6.11 is out! See what's new in the release blog

Adding buttons to layout

Scheduled Pinned Locked Moved Unsolved Qt for Python
3 Posts 2 Posters 1.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    afobeus
    wrote on last edited by
    #1

    Hi, I'm wondering why this code doesn't work. I expect all buttons to be placed in a row like this:51a42f03-95d1-4eae-a522-780099ce1dd0-image.png But I see only white window:672241e4-19e2-4035-aa71-d6f3338bf186-image.png . My code:

        def init_ui(self):
            self.setWindowTitle("Алфавитный указатель")
            self.setGeometry(100, 100, 1000, 700)
            self.buttons_layout = QHBoxLayout()
            self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)]
            for button in self.buttons:
                # button.clicked.connect(lambda: self.filter_data(button.text()))
                self.buttons_layout.addWidget(button)
            self.setLayout(self.buttons_layout)
    

    My full code:

    import csv
    import random
    import sys
    
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWidgets import QMainWindow, QTableWidget, QTableWidgetItem,\
        QLabel, QPushButton, QHBoxLayout
    from PyQt5.QtCore import QRect
    
    
    class MyWidget(QMainWindow):
        def __init__(self):
            super().__init__()
            self.init_ui()
            # self.loadTable()
    
        def init_ui(self):
            self.setWindowTitle("Алфавитный указатель")
            self.setGeometry(100, 100, 1000, 700)
            self.buttons_layout = QHBoxLayout()
            self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)]
            for button in self.buttons:
                # button.clicked.connect(lambda: self.filter_data(button.text()))
                self.buttons_layout.addWidget(button)
            self.setLayout(self.buttons_layout)
            # self.result_label = QLabel(self)
            # self.result_label.setGeometry(10, 660, 200, 30)
            # self.table_widget = QTableWidget(self)
            # self.table_widget.setGeometry(10, 50, 980, 600)
    
        # def loadTable(self, data):
        #     self.table_widget.setColumnCount(5)
        #     self.table_widget.setHorizontalHeaderLabels(["ID", "Название", "Год", "Жанр",
        #                                                  "Продолжительность"])
        #     self.table_widget.setRowCount(0)
        #     for i, row in enumerate(data):
        #         self.table_widget.setRowCount(self.table_widget.rowCount() + 1)
        #         for j, elem in enumerate(row):
        #             self.table_widget.setItem(i, j, QTableWidgetItem(elem))
        #     self.table_widget.resizeColumnsToContents()
        #
        # def filter_data(self, letter):
        #     pass
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = MyWidget()
        ex.show()
        sys.exit(app.exec())
    
    
    JonBJ 1 Reply Last reply
    0
    • A afobeus

      Hi, I'm wondering why this code doesn't work. I expect all buttons to be placed in a row like this:51a42f03-95d1-4eae-a522-780099ce1dd0-image.png But I see only white window:672241e4-19e2-4035-aa71-d6f3338bf186-image.png . My code:

          def init_ui(self):
              self.setWindowTitle("Алфавитный указатель")
              self.setGeometry(100, 100, 1000, 700)
              self.buttons_layout = QHBoxLayout()
              self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)]
              for button in self.buttons:
                  # button.clicked.connect(lambda: self.filter_data(button.text()))
                  self.buttons_layout.addWidget(button)
              self.setLayout(self.buttons_layout)
      

      My full code:

      import csv
      import random
      import sys
      
      from PyQt5.QtWidgets import QApplication
      from PyQt5.QtWidgets import QMainWindow, QTableWidget, QTableWidgetItem,\
          QLabel, QPushButton, QHBoxLayout
      from PyQt5.QtCore import QRect
      
      
      class MyWidget(QMainWindow):
          def __init__(self):
              super().__init__()
              self.init_ui()
              # self.loadTable()
      
          def init_ui(self):
              self.setWindowTitle("Алфавитный указатель")
              self.setGeometry(100, 100, 1000, 700)
              self.buttons_layout = QHBoxLayout()
              self.buttons = [QPushButton(chr(index)) for index in range(ord('А'), ord('Я') + 1)]
              for button in self.buttons:
                  # button.clicked.connect(lambda: self.filter_data(button.text()))
                  self.buttons_layout.addWidget(button)
              self.setLayout(self.buttons_layout)
              # self.result_label = QLabel(self)
              # self.result_label.setGeometry(10, 660, 200, 30)
              # self.table_widget = QTableWidget(self)
              # self.table_widget.setGeometry(10, 50, 980, 600)
      
          # def loadTable(self, data):
          #     self.table_widget.setColumnCount(5)
          #     self.table_widget.setHorizontalHeaderLabels(["ID", "Название", "Год", "Жанр",
          #                                                  "Продолжительность"])
          #     self.table_widget.setRowCount(0)
          #     for i, row in enumerate(data):
          #         self.table_widget.setRowCount(self.table_widget.rowCount() + 1)
          #         for j, elem in enumerate(row):
          #             self.table_widget.setItem(i, j, QTableWidgetItem(elem))
          #     self.table_widget.resizeColumnsToContents()
          #
          # def filter_data(self, letter):
          #     pass
      
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          ex = MyWidget()
          ex.show()
          sys.exit(app.exec())
      
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #2

      @afobeus
      QMainWindows have their own layout (see docs), you should not be doing self.setLayout(...). If you are intending to use a QMainWindow you might want to look at QMainWindow.setCentralWidget(), but I'm actually wondering if you just intend to use/derive from a plain QWidget?

      1 Reply Last reply
      2
      • A Offline
        A Offline
        afobeus
        wrote on last edited by
        #3

        Thanks a lot!

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved