How to place elements not on each other and make a table of a certain size enter image description here

from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget, QTableWidget, QTableWidgetItem from PyQt5.QtCore import QSize, Qt from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtGui import QIcon, QPixmap from PyQt5 import QtGui from selenium import webdriver import lxml.html import requests from bs4 import BeautifulSoup import time import random class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setMinimumSize(QSize(480, 80)) self.setWindowTitle("Π Π°Π±ΠΎΡ‚Π° с QTableWidget") central_widget = QWidget(self) self.setCentralWidget(central_widget) grid_layout = QGridLayout() central_widget.setLayout(grid_layout) table = QTableWidget(self) table.setColumnCount(3) table.setRowCount(1) self.button = QPushButton("Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ", self) self.button.move(350,170) # УстанавливаСм Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"]) # УстанавливаСм Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ table.horizontalHeaderItem(0).setToolTip("356") table.horizontalHeaderItem(1).setToolTip("nuk ") table.horizontalHeaderItem(2).setToolTip("246") # УстанавливаСм Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft) table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter) table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight) # заполняСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку table.setItem(0, 0, QTableWidgetItem("количСство")) table.setItem(0, 1, QTableWidgetItem("ΠΊΡ‚ΠΎ")) table.setItem(0, 2, QTableWidgetItem("врСмя")) # Π΄Π΅Π»Π°Π΅ΠΌ рСсайз ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΠΎ содСрТимому table.resizeColumnsToContents() grid_layout.addWidget(table, 0, 0) # ДобавляСм Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² сСтку if __name__ == "__main__": import sys app = QApplication(sys.argv) mw = MainWindow() mw.show() sys.exit(app.exec()) 
  • If you want a certain size of the table, that is, setFixedWidth / setFixedHeight / setFixedSize, example: table.setFixedWidth(300) - gil9red

2 answers 2

Or so:

 from PyQt5.QtWidgets import (QApplication, QMainWindow, QGridLayout, QWidget, QTableWidget, QTableWidgetItem, QPushButton, QHeaderView) from PyQt5.QtCore import QSize, Qt class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setMinimumSize(QSize(480, 80)) self.setWindowTitle("Π Π°Π±ΠΎΡ‚Π° с QTableWidget") central_widget = QWidget() self.setCentralWidget(central_widget) grid_layout = QGridLayout() central_widget.setLayout(grid_layout) self.table = QTableWidget() self.table.setColumnCount(3) self.table.setRowCount(3) self.button = QPushButton("Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ") #self.button.move(350,170) self.button.clicked.connect(self.close) # УстанавливаСм Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ self.table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"]) self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) # УстанавливаСм Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ self.table.horizontalHeaderItem(0).setToolTip("356") self.table.horizontalHeaderItem(1).setToolTip("nuk ") self.table.horizontalHeaderItem(2).setToolTip("246") # УстанавливаСм Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft) self.table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter) self.table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight) # заполняСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку self.table.setItem(0, 0, QTableWidgetItem("количСство")) self.table.setItem(0, 1, QTableWidgetItem("ΠΊΡ‚ΠΎ")) self.table.setItem(0, 2, QTableWidgetItem("врСмя")) # Π΄Π΅Π»Π°Π΅ΠΌ рСсайз ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΠΎ содСрТимому self.table.resizeColumnsToContents() grid_layout.addWidget(self.table, 0, 0) # ДобавляСм Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² сСтку grid_layout.addWidget(self.button, 0, 1) # +++ if __name__ == "__main__": import sys app = QApplication(sys.argv) mw = MainWindow() mw.show() sys.exit(app.exec()) 

enter image description here

    Once you start using layouts, go ahead. Manually specifying the position of the widget and its size is very uncomfortable and almost never needed

     from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setMinimumSize(QSize(480, 80)) self.setWindowTitle("Π Π°Π±ΠΎΡ‚Π° с QTableWidget") table = QTableWidget() table.setColumnCount(3) table.setRowCount(1) # УстанавливаСм Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"]) # УстанавливаСм Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ table.horizontalHeaderItem(0).setToolTip("356") table.horizontalHeaderItem(1).setToolTip("nuk ") table.horizontalHeaderItem(2).setToolTip("246") # УстанавливаСм Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft) table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter) table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight) # заполняСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку table.setItem(0, 0, QTableWidgetItem("количСство")) table.setItem(0, 1, QTableWidgetItem("ΠΊΡ‚ΠΎ")) table.setItem(0, 2, QTableWidgetItem("врСмя")) # Π΄Π΅Π»Π°Π΅ΠΌ рСсайз ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΠΎ содСрТимому table.resizeColumnsToContents() self.button = QPushButton("Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ") # Или QHBoxLayout, ΠΈΠ»ΠΈ QGridLayout main_layout = QVBoxLayout() main_layout.addWidget(table) main_layout.addWidget(self.button) central_widget = QWidget() central_widget.setLayout(main_layout) self.setCentralWidget(central_widget) if __name__ == "__main__": import sys app = QApplication(sys.argv) mw = MainWindow() mw.show() sys.exit(app.exec()) 

    Screenshot:

    enter image description here