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()
何卒、宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー