質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1482閲覧

PyQt5 QTableViewの表テーブルに画像を埋め込みたい python

goki_gottan

総合スコア168

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/07/07 11:07

QTableViewに画像を埋め込みたく思います。
ボタンやコンボボックス埋め込みは実現できましたが、画像を埋め込むことができません。

画像ウィゲットの参考は、参考にしたサイト

肝となるコードは箇所ですが、以下ではテーブルの5列目に画像を刺し込めません。

self.label = QLabel() self.label.setPixmap(QPixmap(z1+ "\\●.png")) # ラベルを作ってその中に画像を置く # lbl = QLabel(self) # lbl.setPixmap(pixmap) # hbox.addWidget(lbl) self.setCellWidget(0, 5, self.label)

願わくば、テーブル表の5列目にそれぞれ異なる画像を入れたく、また、
そのセル内にも4枚以下までの画像(1/4サイズに画像を加工)したく思います。

ボタンやコマンドボックスの差し込みは、
参考サイト
こちらを参考に実現可能

全コードを出します。

from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout,QCheckBox,QHBoxLayout,QPushButton,QLabel from PyQt5.QtGui import QIcon from PyQt5 import QtGui from PyQt5.QtCore import pyqtSlot from PyQt5 import QtCore import sys import pandas as pd import sqlite3 import sip from PyQt5.QtWidgets import QMessageBox from PyQt5.QtGui import QPixmap df__ = pd.read_csv("●●")) v1=df__["Item"].to_list()[0]#データベースパス v2=df__["Item"].to_list()[1]#データベース v3=df__["Item"].to_list()[2]#テーブル #v4=df__["Item"].to_list()[3]#テーブル #v5=df__["Item"].to_list()[4]#項目数 z1=v1 r1=v2 table_=v3 conn = sqlite3.connect(●) c = conn.cursor() sql = "SELECT * FROM " + table_ +";" df=pd.read_sql(sql,conn) num1=len(df.columns) num2=len(df) df=df.fillna("-") data=df.to_dict(orient='list') color_style="QPushButton {background-color: #DCDCDC; height: 30px; color: black; font: 30px; border-radius: 30px;} \ QPushButton:hover {background: #708090} \ QPushButton:pressed {background: #000080}" stylesheet = "::section{color: blue; Background-color:rgb(240,220,220);} ::section:checked{color: black; background-color: blue;}"# \ class TableView(QTableWidget): def __init__(self, data, *args): QTableWidget.__init__(self, *args) self.data = data # print(data) self.setData() self.resizeColumnsToContents() self.resizeRowsToContents() # hbox = QHBoxLayout(self) # pixmap = QPixmap(z1+ "\\1_0.png") self.label = QLabel() self.label.setPixmap(QPixmap(z1+ "\\●.png")) # ラベルを作ってその中に画像を置く # lbl = QLabel(self) # lbl.setPixmap(pixmap) # hbox.addWidget(lbl) self.setCellWidget(0, 5, self.label) for a in range(num2): combox_lay = QtWidgets.QComboBox(self) combox_lay.addItems(["●","●●"]) self.setCellWidget(a, 4, combox_lay) def add_image1(self): print("aaaa") pass for a in range(num2): add_button10 = QtWidgets.QPushButton("Add_Image") add_button10.clicked.connect(add_image1) self.setCellWidget(a, 2, add_button10) def setData(self): horHeaders = [] for n, key in enumerate(self.data.keys()): horHeaders.append(key) for m, item in enumerate(self.data[key]): newitem = QTableWidgetItem(str(item)) self.setItem(m, n, newitem) print(self.setItem) self.setHorizontalHeaderLabels(horHeaders) self.horizontalHeader().setStyleSheet(stylesheet) self.verticalHeader().setStyleSheet(stylesheet) class window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): global table_,titleEdit,authorEdit,table_1_Edit global z1_s,r1_s,table_s,g1 global num1,num2,data print(num1) self.centralwidget = QtWidgets.QWidget(self) self.view = QtWidgets.QTableView(self.centralwidget) self.table = TableView(data, num2, num1, self) self.button = QPushButton('削除', self) self.button1 = QPushButton('修正', self) self.button2 = QPushButton('更新', self) self.button3 = QPushButton('終了', self) self.button4 = QPushButton('データベース入れ替え', self) self.button.clicked.connect(self.clickCallback) self.button1.clicked.connect(self.clickCallback1) self.button3.clicked.connect(self.clickCallback2) self.button2.clicked.connect(self.clickCallback3) self.button4.clicked.connect(self.clickCallback4) self.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)#閉じるボタン無効化 title = QLabel('DataBase_Path') author = QLabel('DataBase') table_1 = QLabel('Table') review = QLabel('Table') review1 = QLabel('処理') titleEdit = QLineEdit() authorEdit = QLineEdit() table_1_Edit = QLineEdit() grid = QGridLayout() grid.setSpacing(10) # ラベルの位置設定 grid.addWidget(title, 1, 0) grid.addWidget(titleEdit, 1, 1) print(g1) if g1==0: titleEdit.setText(v1) else: titleEdit.setText(z1_s) grid.addWidget(author, 2, 0) grid.addWidget(authorEdit, 2, 1) if g1==0: authorEdit.setText(v2) else: authorEdit.setText(r1_s) grid.addWidget(self.button4, 2, 2,1,1) grid.addWidget(table_1, 3, 0) grid.addWidget(table_1_Edit, 3, 1) if g1==0: table_1_Edit.setText(v3) else: table_1_Edit.setText(table_s) grid.addWidget(review, 4, 0) grid.addWidget(self.table, 4, 1, 1, 4) #ボタン grid.addWidget(review1, 5, 0) grid.addWidget(self.button, 5, 1,1,1) grid.setColumnStretch(1, 1) grid.addWidget(self.button1, 5, 2,1,1) grid.setColumnStretch(2, 1) grid.addWidget(self.button2, 5, 3,1,1) grid.setColumnStretch(3, 1) grid.addWidget(self.button3, 5, 4,1,1) grid.setColumnStretch(4, 1) self.button.setStyleSheet(color_style) self.button1.setStyleSheet(color_style) self.button2.setStyleSheet(color_style) self.button3.setStyleSheet(color_style) self.table.setStyleSheet("QTableView{gridline-color: black}") self.view.setSortingEnabled(True) self.view.sortByColumn(0,QtCore.Qt.AscendingOrder) self.table.setCurrentItem(None) self.setLayout(grid) self.setGeometry(800, 100, 1650, 850) self.setWindowTitle('Review') self.show() def doSomething(self): self.quit() #削除 def clickCallback(self): global df if self.table.currentItem() is None: return z1_s=titleEdit.text() r1_s=authorEdit.text() table_s=table_1_Edit.text() table_s1=table_s + "_image" table_s2=table_s + "_document" print(self.table.currentItem().text()) #ID取得 conn = sqlite3.connect(z1 + '\\' + r1) c = conn.cursor() id_str=str(self.table.currentItem().text()) conn.execute(f'DELETE FROM {table_s} WHERE id = "{id_str}"') conn.commit() self.table.removeRow(self.table.currentItem().row()) try: conn.execute(f'DELETE FROM {table_s1} WHERE 部品ID = "{id_str}"') conn.commit() except: pass try: conn.execute(f'DELETE FROM {table_s2} WHERE 部品ID = "{id_str}"') conn.commit() except: pass QMessageBox.information(None, "通知", "削除完了です。", QMessageBox.Yes) self.table.setCurrentItem(None) self.table.setFocus() #修正 def clickCallback1(self): print("bbb") return #終了 def clickCallback2(self): global conn,app conn.close() self.close() QApplication.quit() app.exec_() return #更新 def clickCallback3(self): global table_1_Edit,titleEdit,authorEdit z1=titleEdit.text() r1=authorEdit.text() table_=table_1_Edit.text() print(table_) conn = sqlite3.connect(●) c = conn.cursor() sql = "SELECT * FROM " + table_ +";" df=pd.read_sql(sql,conn) num1=len(df.columns) num2=len(df) df=df.fillna("-") data_=df.to_dict(orient='list') # data=data_ b = list(data_.keys()) c = list(data_.values()) for b_1 in b: for c_1 in range(len(c)): for d_1 in range(len(c[c_1])): data[b_1][d_1] = data_[b_1][d_1] self.table.setData() return #データベース更新 def clickCallback4(self): global table_1_Edit,titleEdit,authorEdit,ex global z1_s,r1_s,table_s,g1 global num1,num2,data z1_s=titleEdit.text() r1_s=authorEdit.text() table_s=table_1_Edit.text() conn = sqlite3.connect(●) c = conn.cursor() sql = "SELECT * FROM " + table_s +";" df=pd.read_sql(sql,conn) num1=len(df.columns) num2=len(df) df=df.fillna("-") data_=df.to_dict(orient='list') data=[] data=data_ b = list(data_.keys()) c = list(data_.values()) ex.close() g1=1 ex=window() ex.show() return def main(): global app,ex,g1 g1=0 app = QtWidgets.QApplication(sys.argv) ex = window() ex.show() sys.exit(app.exec_()) if __name__ == '__main__': main()

何卒、宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

goki_gottan

2022/07/08 04:26

画像を引用するパスが間違っておりました。パスを通すと、ちゃんと表示されました。 ですが、画像が大きすぎて、セルのサイズにフィットさせたいです。 良い方法ありますでしょうか?
goki_gottan

2022/07/08 08:59

解決しました pixmap = QPixmap("●.png") pixmap=pixmap.scaled(150, 200, QtCore.Qt.KeepAspectRatio) lbl = QLabel(self) lbl.setPixmap(pixmap) self.setCellWidget(0, 0, lbl)
guest

回答1

0

自己解決

解決しました
pixmap = QPixmap("●.png")
pixmap=pixmap.scaled(150, 200, QtCore.Qt.KeepAspectRatio)
lbl = QLabel(self)
lbl.setPixmap(pixmap)
self.setCellWidget(0, 0, lbl)

投稿2022/07/29 07:11

goki_gottan

総合スコア168

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問