Jump to content

Como atualizar uma imagem dinamicamente em Python com base em dados de uma tabela?


bzanotti

Postagens Recomendadas

Boa tarde pessoal, tudo bem?

Gostaria de uma dica:

Vocês indicam alguma aplicação no Python que ajude a eu desenvolver esse modelo abaixo?

O que eu precisaria:

Eu terei uma tabela ("Vegetais do Canteiro 1) e, conforme eu for alterando os dados nessa tabela, a imagem ao lado ("Canteiro") vai atualizando conforme os dados da tabela.

Alguém tem alguma dica?

image.png

Obrigado!

  • Curtir 1
Link to comment
Compartilhe em outros sites

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableWidget, QTableWidgetItem, QLabel, QHBoxLayout
from PySide6.QtGui import QPixmap, QImage
from PIL import Image, ImageDraw
from io import BytesIO


class GardenApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Canteiro Interativo")

        # Layout principal
        main_layout = QVBoxLayout(self)

        # Tabela de Vegetais
        self.table = QTableWidget(2, 2)
        self.table.setHorizontalHeaderLabels(["Vegetais", "Quantidade"])
        self.table.setItem(0, 0, QTableWidgetItem("Cenoura"))
        self.table.setItem(1, 0, QTableWidgetItem("Cebola"))

        # Conectar mudança de valor à função de atualização
        self.table.itemChanged.connect(self.update_garden_plot)

        # Imagem do Canteiro
        self.image_label = QLabel()

        # Adicionando componentes ao layout
        main_layout.addWidget(self.table)
        main_layout.addWidget(self.image_label)

        # Atualização inicial
        self.update_garden_plot()

    def update_garden_plot(self):
        # Tamanho dos ícones (representando os vegetais)
        icon_size = 30
        # Margem entre os ícones
        margin = 5

        # Criação de uma imagem base
        total_width = 300
        total_height = 200
        garden_image = Image.new("RGB", (total_width, total_height), (200, 180, 150))
        draw = ImageDraw.Draw(garden_image)

        # Variável para controle de posição
        x_offset, y_offset = 10, 10

        # Obter os valores da tabela
        for row in range(self.table.rowCount()):
            vegetable_item = self.table.item(row, 0)
            quantity_item = self.table.item(row, 1)

            if vegetable_item and quantity_item:
                try:
                    quantity = int(quantity_item.text())
                except ValueError:
                    continue  # Pula se a quantidade não for número

                # Determinar cor para cada vegetal
                color = (255, 165, 0) if vegetable_item.text() == "Cenoura" else (139, 69, 19)  # Cenoura e Cebola

                # Adicionar "imagens" lado a lado
                for i in range(quantity):
                    # Se a largura for excedida, pula para a próxima linha
                    if x_offset + icon_size > total_width - 10:
                        x_offset = 10
                        y_offset += icon_size + margin

                    # Desenhar o vegetal como um quadrado colorido
                    draw.rectangle([x_offset, y_offset, x_offset + icon_size, y_offset + icon_size], fill=color)
                    x_offset += icon_size + margin

                # Reposicionar para o próximo vegetal
                x_offset = 10
                y_offset += icon_size + margin

        # Converter a imagem para mostrar no QLabel
        buffer = BytesIO()
        garden_image.save(buffer, format="PNG")
        image_data = buffer.getvalue()
        qt_image = QImage.fromData(image_data)
        self.image_label.setPixmap(QPixmap.fromImage(qt_image))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = GardenApp()
    window.show()
    sys.exit(app.exec())

 

  • Ajudou! 1
Link to comment
Compartilhe em outros sites

  • Casa do Desenvolvedor mudou o título para Como atualizar uma imagem dinamicamente em Python com base em dados de uma tabela?

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...