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

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

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

解決済

1回答

2979閲覧

Qlistwidgetのリストに追加されているitemの色を変えたい

ookura

総合スコア27

0グッド

0クリップ

投稿2020/11/03 08:14

編集2020/11/03 08:21

ボタンクリックを行うと、ファイルリストで選択されているアイテムの背景色・文字色が変わるようにしたいのですが、設定方法がわかりません。

idx = self.FileList.currentRow()
self.FileList.item(idx).setBackground('color;red')

で何か色が変わらないかと試したのですが変化なく、
エラーも出ずアプリケーションが落ちました。

どなたかお詳しい方ご教示ください。
よろしくお願いします。

python

1# -*- coding: utf-8 -*- 2 3import numpy as np 4from PIL import Image 5import sys 6import pyocr.builders 7import cv2 8import sys 9import os 10 11from PyQt5 import QtWidgets,QtCore 12from PyQt5.QtWidgets import QInputDialog,QProgressBar, QPushButton, QRadioButton,QMessageBox,QLineEdit,QVBoxLayout,QTextEdit,QLabel,QTableWidget, QTableWidgetItem,QGridLayout 13from PyQt5.QtCore import pyqtSlot 14from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 15import matplotlib.pyplot as plt 16import glob 17 18from PyQt5.QtWidgets import (QWidget, QHBoxLayout, 19 QLabel, QApplication) 20from PyQt5.QtGui import QPixmap 21 22class Application(QtWidgets.QWidget): 23 def __init__(self): 24 super().__init__() 25 # UIの初期化 26 self.initUI() 27 28 # rootディレクトリ 29 self.root = r"C:\Users\ookura\Desktop\" 30 # 拡張子 31 self.ext = 'jpg' 32 33 # ファイルを配置 34 self.set_FileList() 35 36 # 画像 37 self.FileName = self.FileList.item(0).text() 38 39 # 画像を読み込む 40 self.load_ImageFile() 41 42 # Figureの初期化 43 self.initFigure() 44 45 # ファイルを変更した時のイベント 46 self.FileList.itemSelectionChanged.connect(self.FileList_Changed) 47 48 # UIの初期化 49 def initUI(self): 50 # Figure用のWidget 51 self.FigureWidget = QtWidgets.QWidget(self) 52 # FigureWidgetにLayoutを追加 53 self.FigureLayout = QtWidgets.QVBoxLayout(self.FigureWidget) 54 # Marginを消す 55 self.FigureLayout.setContentsMargins(0,0,0,0) 56 # ファイルのリスト 57 self.FileList = QtWidgets.QListWidget(self) 58 #table 59 self.tableWidget = QtWidgets.QTableWidget(self) 60 61 self.hbox = QHBoxLayout(self) # 横方向のレイアウト 62 self.hbox.addWidget(self.FileList) 63 self.hbox.addWidget(self.FigureWidget) 64 #self.hbox.addStretch(0) 65 self.hbox.addWidget(self.tableWidget) 66 self.setLayout(self.hbox) 67 self.resize(1920, 1080) 68 self.createTable() 69 70 self.FileList.move(500,500) 71 #ocrボタン設置 72 btn_test = QPushButton("test", self) 73 btn_test.setStyleSheet("color:black;background-color:white;font-size:14px;font-family:メイリオ;") 74 btn_test.move(1500, 565) 75 # クリックされたらbuttonClickedの呼び出し 76 btn_test.clicked.connect(self.test_buttonClicked) 77 78 # Figureの初期化 79 def initFigure(self): 80 # Figureを作成 81 self.Figure = plt.figure() 82 # FigureをFigureCanvasに追加 83 self.FigureCanvas = FigureCanvas(self.Figure) 84 # LayoutにFigureCanvasを追加 85 self.FigureLayout.addWidget(self.FigureCanvas) 86 87 self.axis = self.Figure.add_subplot(1,1,1) 88 self.axis_image = self.axis.imshow(self.image, cmap='gray') 89 plt.axis('off') 90 91 # ファイルを配置 92 def set_FileList(self): 93 # ファイルの読み込み 94 Files = glob.glob(self.root+'*.'+self.ext) 95 # ソート 96 self.Files = sorted(Files) 97 98 # ファイルリストに追加 99 for file in self.Files: 100 self.FileList.addItem(os.path.basename(file)) 101 102 # ファイルを変更した時の関数 103 def FileList_Changed(self): 104 # 選択しているファイルの名前を取得 105 self.FileName = self.FileList.selectedItems()[0].text() 106 # 画像を読み込み 107 self.load_ImageFile() 108 # Figureを更新 109 self.update_Figure() 110 111 # 画像ファイルを読み込む 112 def load_ImageFile(self): 113 # 画像を開く 114 image = Image.open(self.root + self.FileName) 115 # numpy.ndarrayに 116 self.image = np.asarray(image) 117 118 # Figureを更新 119 def update_Figure(self): 120 self.axis_image.set_data(self.image) 121 self.FigureCanvas.draw() 122 #テーブル 123 def createTable(self): 124 # Create table 125 #self.tableWidget = QTableWidget() 126 self.tableWidget.setRowCount(20) 127 self.tableWidget.setColumnCount(5) 128 self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)")) 129 self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)")) 130 self.tableWidget.setItem(0,3, QTableWidgetItem("Cell (2,1)")) 131 self.tableWidget.setItem(0,4, QTableWidgetItem("Cell (2,2)")) 132 self.tableWidget.setItem(0,5, QTableWidgetItem("Cell (3,1)")) 133 self.tableWidget.setItem(0,6, QTableWidgetItem("Cell (3,2)")) 134 self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)")) 135 self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)")) 136 self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)")) 137 self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)")) 138 self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)")) 139 self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)")) 140 self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)")) 141 self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)")) 142 self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)")) 143 self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)")) 144 self.tableWidget.move(500,1000) 145 146 # table selection change 147 #self.tableWidget.doubleClicked.connect(self.on_click) 148 149 @pyqtSlot() 150 def on_click(self): 151 print("\n") 152 for currentQTableWidgetItem in self.tableWidget.selectedItems(): 153 print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text()) 154 155 def test_buttonClicked(self): 156 print("a") 157 158 159 160#imread再編(.open読み込み不可) 161def imread(filename, flags=cv2.IMREAD_COLOR, dtype=np.uint8): 162 try: 163 n = np.fromfile(filename, dtype) 164 img = cv2.imdecode(n, flags) 165 return img 166 except Exception as e: 167 print(e) 168 return None 169 170#画像加工 171def process(path): 172 img_or = imread(path) 173 174 #dst = cv2.fastNlMeansDenoisingColored(img_or, None, 10, 110, 7, 21) 175 # グレースケール化 176 img_gray = cv2.cvtColor(img_or, cv2.COLOR_RGB2GRAY) 177 # 2値化(100:2値化の閾値/画像を見て調整する) 178 # ret,thresh1 = cv2.threshold(img_gray,100,255,cv2.THRESH_BINARY) 179 ret, thresh1 = cv2.threshold(img_gray, 180, 255, cv2.THRESH_BINARY) 180 # ノイズ処理(モルフォロジー変換) 181 kernel = np.ones((3, 3), np.uint8) 182 img_opening = cv2.morphologyEx(thresh1, cv2.MORPH_OPEN, kernel) 183 184 return img_opening 185#OpenCV型→PIL型に変換 186def cv2pil(image): 187 ''' OpenCV型 -> PIL型 ''' 188 new_image = image.copy() 189 if new_image.ndim == 2: # モノクロ 190 pass 191 elif new_image.shape[2] == 3: # カラー 192 new_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 193 elif new_image.shape[2] == 4: # 透過 194 new_image = cv2.cvtColor(image, cv2.COLOR_BGRA2RGBA) 195 new_image = Image.fromarray(new_image) 196 return new_image 197#読み取り位置調整 198 199 200path = r"C:\Users\ookura\Desktop\test.jpg" 201 202QApp = QtWidgets.QApplication(sys.argv) 203app = Application() 204app.show() 205sys.exit(QApp.exec_()) 206 207 208

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

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

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

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

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

guest

回答1

0

ベストアンサー

setBackground には QColor を指定します。

from PyQt5.QtCore import Qt item.setBackground(Qt.red)

"color: red;" はスタイルシートで設定する場合の表記で、
item ではなく、widget に設定します。 Stylesheet Example

宣言的な記述になるので、
動的に&個別に色を変えたい場合には適してませんが、スタイルシートの利用例

python

1import sys 2from PyQt5.QtCore import Qt 3from PyQt5.QtWidgets import QApplication, QListWidget 4 5if __name__ == '__main__': 6 app = QApplication(sys.argv) 7 app.setStyleSheet(""" 8 QListWidget::item:selected { 9 background-color: red; 10 } 11 """) 12 win = QListWidget() 13 for item in ["A", "B", "C"]: 14 win.addItem(item) 15 win.show() 16 17 app.exec_()

尚、これが原因で落ちることは有りません。
該当箇所 .setBackground('color;red') では TypeError になるはずです。

投稿2020/11/03 09:22

編集2020/11/03 09:41
teamikl

総合スコア8681

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

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

ookura

2020/11/03 23:18

いつも適切なご回答をいただきありがとうございます。 勉強になります。 問題解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問