Answer the question
In order to leave comments, you need to log in
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
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 questionAsk a Question
731 491 924 answers to any question