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

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

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

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

解決済

PyQtで2つのラベルを一つにまとめたソースコードの添削をお願いいたします

nahon
nahon

総合スコア13

Python 3.x

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

2回答

-2評価

1クリップ

484閲覧

投稿2022/02/11 13:08

イメージ説明

前提・実現したいこと

PyQt5で画像ラベルとテキストラベルを横に並べ、ペアにしてリストのように表示し、
ラベルペアに対して同じ動作をさせたいと思っております。

具体的には、マウスオーバーしたら色を変え、クリックしたらメッセージを表示する、です。

今回ソースコードのような形で実装したのですが、PyQtを触り始めたばかりで無駄が多いのではないかと思っております。
よりきれいなPyQt向きなコードを教えていただけないでしょうか。
よろしくお願いいたします。

該当のソースコード

python

from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sys class LabelTest(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # ラベル参照用辞書 self.lbl_dict = dict() # 背景色 tmpWidget = QWidget() self.backGroundColor = tmpWidget.palette().color(QPalette.Window); # 設定 icosize = 16 width = 120 for i in range(10): # 画像 lblImg = QLabel(self) lblImg.setObjectName(str(i)) lblImg.setText( "●" ) #lblImg.setPixmap( QPixmap("D:\\test.ico") ) #16x16 ico lblImg.installEventFilter(self) lblImg.move(0, i*icosize) lblImg.resize(icosize,icosize) # テキスト lblText = QLabel(self) lblText.setObjectName(str(i)) lblText.setText("Text") lblText.installEventFilter(self) lblText.move(icosize, i*icosize) lblText.resize(width-icosize,icosize) # ラベルペアを参照用辞書に追加 self.lbl_dict.setdefault(str(i), (lblImg,lblText)) self.show() def eventFilter(self, object, event): # マウスオーバーしたラベルペアを黄色にする if event.type()== QEvent.Enter: for key, value in self.lbl_dict.items(): if object.objectName() == key: img, lbl = value palette_yellow = QPalette() palette_yellow.setColor(QPalette.Window, Qt.yellow) img.setPalette(palette_yellow) img.setAutoFillBackground(True) lbl.setPalette(palette_yellow) lbl.setAutoFillBackground(True) return True # マウスアウトしたラベルペアを背景色にする elif event.type()== QEvent.Leave: for key, value in self.lbl_dict.items(): if object.objectName() == key: img, lbl = value palette_blue = QPalette() palette_blue.setColor(QPalette.Window, self.backGroundColor ) img.setPalette(palette_blue) img.setAutoFillBackground(True) lbl.setPalette(palette_blue) lbl.setAutoFillBackground(True) return True # クリックしたらメッセージを表示する elif event.type() == QEvent.MouseButtonPress: if event.button() == Qt.LeftButton: print(object.objectName(), "clicked!") return True return False if __name__== '__main__': app= QApplication(sys.argv) ex= LabelTest() sys.exit(app.exec_())

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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