@Sasha294

Как в QTableWidget подгрузить картинки из интернета, а не из папки?

Как в QTableWidget подгрузить картинки из интернета, а не из папки?
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())
  • Вопрос задан
  • 606 просмотров
Пригласить эксперта
Ответы на вопрос 1
sanya84
@sanya84
Фанатик Python 3
Только я не нашёл как установить размер ячейки под изображение
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())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы