S
S
Sasha2942018-07-25 07:59:01
Python
Sasha294, 2018-07-25 07:59:01

How to load pictures from the Internet in QTableWidget, and not from a folder?

How to load pictures from the Internet in QTableWidget, and not from a folder?

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, 800))             
        self.setWindowTitle("Работа с QTableWidget")  

        central_widget = QWidget()                  
        self.setCentralWidget(central_widget)           

        grid_layout = QGridLayout()             
        central_widget.setLayout(grid_layout)   

        self.table = QTableWidget()  
        self.table.setColumnCount(4)     
        self.table.setRowCount(11111) 

        self.button = QPushButton("2000") 
        #self.button.move(350,170)
        self.button.clicked.connect(self.close)

        # Устанавливаем заголовки таблицы
        self.table.setHorizontalHeaderLabels(["2000", "2000", "2000","2000"])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)                   

        # Устанавливаем всплывающие подсказки на заголовки
        self.table.horizontalHeaderItem(0).setToolTip("200")
        self.table.horizontalHeaderItem(1).setToolTip("200 ")
        self.table.horizontalHeaderItem(2).setToolTip("200")

        # Устанавливаем выравнивание на заголовки
        self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignHCenter)
        self.table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
        self.table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignHCenter)
        self.table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignHCenter)

        # заполняем первую строку
        self.table.setItem(0, 0, QTableWidgetItem("2000"))
        self.table.setItem(0, 1, QTableWidgetItem("2000"))
        self.table.setItem(4, 2, QTableWidgetItem("2000"))

        # делаем ресайз колонок по содержимому
        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())

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander, 2018-07-26
@sanya84

Only I did not find how to set the cell size under the image

from io import BytesIO
import requests 
from PyQt5.QtWidgets import (QApplication, QMainWindow, QGridLayout,
                             QWidget, QTableWidget, QTableWidgetItem)
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtCore import QSize, Qt, QThread, pyqtSignal, pyqtSlot


class UploadImage(QThread):
    data = pyqtSignal(bytes)
    def __init__(self):
        super().__init__()
    @pyqtSlot()
    def run(self):

        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2)\
        AppleWebKit/537.36 (KHTML, like Gecko)\
        Chrome/63.0.3239.84 Safari/537.36',
        'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'}

        url = "https://cdn.programiz.com/sites/tutorial2program/files/hello-world.jpg"

        try:
            content = requests.get(url, headers=headers).content
            self.data.emit(content)
        except requests.exceptions.ConnectionError as error:
            print(error)


class MainWindow(QMainWindow):
    # Переопределяем конструктор класса
    def __init__(self):
        # Обязательно нужно вызвать метод супер класса
        super().__init__()

        self.pixmap = QPixmap()

        self.setMinimumSize(QSize(800, 300))             # Устанавливаем размеры
        self.setWindowTitle("Загрузка изображения из интернета")# Устанавливаем заголовок окна

        central_widget = QWidget(self)                  # Создаём центральный виджет
        self.setCentralWidget(central_widget)           # Устанавливаем центральный виджет
 
        grid_layout = QGridLayout()             # Создаём QGridLayout
        central_widget.setLayout(grid_layout)   # Устанавливаем данное размещение в центральный виджет
 
        self.table = QTableWidget(self)  # Создаём таблицу

        self.table.setColumnCount(1)     
        self.table.setRowCount(1)        # и одну строку в таблице
 
        # Устанавливаем заголовки таблицы
        self.table.setHorizontalHeaderLabels(["Изображение"])
 
        # Устанавливаем всплывающие подсказки на заголовки
        self.table.horizontalHeaderItem(0)
        self.table.horizontalHeaderItem(0).setToolTip("Шутка")

        # Устанавливаем выравнивание на заголовки
        self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)

        # делаем ресайз колонок по содержимому
        self.table.resizeColumnsToContents()
        grid_layout.addWidget(self.table, 0, 0)   # Добавляем таблицу в сетку

        self.upload_image = UploadImage()
        self.upload_image.start()
        self.upload_image.data.connect(self.show_image)

    def show_image(self, image_bytes):
        self.bytes_io = BytesIO(image_bytes)
        self.pixmap.loadFromData(self.bytes_io.getvalue())
        
        image = QTableWidgetItem()
        image.setData(Qt.DecorationRole, self.pixmap)
        image.setFlags(image.flags() ^ Qt.ItemIsEditable)
        
        self.table.setItem(0, 0, image)
        self.table.resizeColumnsToContents()
        
if __name__ == "__main__":
    import sys
 
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec())

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question