下記サイトを参考に画像ビューアーを作成し、さらにテーブルを埋め込もうと思ったのですがうまくいきません。
https://qiita.com/ceptree/items/c3a7c52cdd152c9f62d9
テーブルは下記サイトを参考に行いました
https://qiita.com/MamoruItoi/items/94641421aeac2eafb5b1#pyqt5-table
テーブルをGUIウィンドウの右側に設置したかったので、
setGeometryで位置を調整したりしてみたのですが
メインウィンドウにかぶさるように表示されてしまい、
setLayoutの記述する順番がおかしいかと思い、ウィジェット配置後に変更したら
今度はウィンドウは希望の位置なのですが、テーブルが表示されませんでした。
どなたかお詳しい方、ご教示いただけませんでしょうか。
よろしくお願いします。
python#
1 2import numpy as np 3from PIL import Image 4import sys 5import sys 6import os 7 8from PyQt5 import QtWidgets,QtCore 9from PyQt5.QtWidgets import QInputDialog,QProgressBar, QPushButton, QRadioButton,QMessageBox,QLineEdit,QVBoxLayout,QTextEdit,QLabel,QTableWidget, QTableWidgetItem 10from PyQt5.QtCore import pyqtSlot 11from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 12import matplotlib.pyplot as plt 13import glob 14 15class Application(QtWidgets.QWidget): 16 def __init__(self): 17 super().__init__() 18 # UIの初期化 19 self.initUI() 20 21 # rootディレクトリ※指定フォルダ選択 22 self.root = r"C:\Users\ookura\Desktop\test1\" 23 # 拡張子 24 self.ext = 'jpg' 25 26 # ファイルを配置 27 self.set_FileList() 28 29 # 画像 30 self.FileName = self.FileList.item(0).text() 31 32 # 画像を読み込む 33 self.load_ImageFile() 34 35 # Figureの初期化 36 self.initFigure() 37 38 # ファイルを変更した時のイベント 39 self.FileList.itemSelectionChanged.connect(self.FileList_Changed) 40 41 # UIの初期化 42 def initUI(self): 43 # Figure用のWidget 44 self.FigureWidget = QtWidgets.QWidget(self) 45 # FigureWidgetにLayoutを追加 46 self.FigureLayout = QtWidgets.QVBoxLayout(self.FigureWidget) 47 # Marginを消す 48 self.FigureLayout.setContentsMargins(0,0,0,0) 49 50 # ファイルのリスト 51 self.FileList = QtWidgets.QListWidget(self) 52 53 #table 54 self.tableWidget = QtWidgets.QTableWidget(self) 55 56 # 配置 57 self.setGeometry(0, 0, 1920, 1080) # 画像 58 self.FileList.setGeometry(5, 50, 200, 1000) # リスト 59 self.FigureWidget.setGeometry(215, 50, 850, 600) # 画像表示 60 self.tableWidget.setGeometry(QtCore.QRect(1080, 50, 800, 600) ) # 画像表示 61 62 # Add box layout, add table to box layout and add box layout to widget 63 self.tableWidget.layout = QVBoxLayout(self.tableWidget) 64 self.tableWidget.layout.addWidget(self.tableWidget) 65 self.setLayout(self.tableWidget.layout) 66 67 self.createTable() 68 # Figureの初期化 69 def initFigure(self): 70 # Figureを作成 71 self.Figure = plt.figure() 72 # FigureをFigureCanvasに追加 73 self.FigureCanvas = FigureCanvas(self.Figure) 74 # LayoutにFigureCanvasを追加 75 self.FigureLayout.addWidget(self.FigureCanvas) 76 77 self.axis = self.Figure.add_subplot(1,1,1) 78 self.axis_image = self.axis.imshow(self.image, cmap='gray') 79 plt.axis('off') 80 81 # ファイルを配置 82 def set_FileList(self): 83 # ファイルの読み込み 84 Files = glob.glob(self.root+'*.'+self.ext) 85 # ソート 86 self.Files = sorted(Files) 87 88 # ファイルリストに追加 89 for file in self.Files: 90 self.FileList.addItem(os.path.basename(file)) 91 92 # ファイルを変更した時の関数 93 def FileList_Changed(self): 94 # 選択しているファイルの名前を取得 95 self.FileName = self.FileList.selectedItems()[0].text() 96 # 画像を読み込み 97 self.load_ImageFile() 98 # Figureを更新 99 self.update_Figure() 100 101 # 画像ファイルを読み込む 102 def load_ImageFile(self): 103 # 画像を開く 104 image = Image.open(self.root + self.FileName) 105 # numpy.ndarrayに 106 self.image = np.asarray(image) 107 108 # Figureを更新 109 def update_Figure(self): 110 self.axis_image.set_data(self.image) 111 self.FigureCanvas.draw() 112 #テーブル 113 def createTable(self): 114 # Create table 115 self.tableWidget = QTableWidget() 116 self.tableWidget.setRowCount(4) 117 self.tableWidget.setColumnCount(2) 118 self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)")) 119 self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)")) 120 self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)")) 121 self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)")) 122 self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)")) 123 self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)")) 124 self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)")) 125 self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)")) 126 self.tableWidget.move(0,0) 127 128 # table selection change 129 self.tableWidget.doubleClicked.connect(self.on_click) 130 131 @pyqtSlot() 132 def on_click(self): 133 print("\n") 134 for currentQTableWidgetItem in self.tableWidget.selectedItems(): 135 print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text()) 136 137 138 139QApp = QtWidgets.QApplication(sys.argv) 140app = Application() 141app.show() 142sys.exit(QApp.exec_()) 143
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/29 07:10