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

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

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

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

解決済

PyQt5でのウィンドウ外でのマウスイベント監視方法

nahon
nahon

総合スコア13

Python 3.x

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

2回答

0評価

0クリップ

428閲覧

投稿2022/02/12 10:51

編集2022/02/15 22:08

イメージ説明

前提・実現したいこと

PyQt5を使い、ウィンドウを細長くしたもの(エッジバー)を左右上に配置し、クリックしたときにアクションをさせています。
この時、エッジバー以外をクリックしたときにもアクションをさせたいのですが、どのように実装すればよいでしょうか?
例えばこの画像でいうと灰色のウィンドウをクリックしたときに、アクションをさせたいです。

よろしくお願いいたします。

該当のソースコード

Python

''' メインウィンドウの左右、上に太さ1pixelのエッジバーを表示する エッジバーをクリックすると、hello()を呼ぶ エッジバーを右クリックすると終了する エッジバー以外の領域をクリックしたときにbye()を呼びたい ''' from re import S from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt, QEvent import sys class EdgeWindow(QWidget): def __init__( self, p_wnd, ): super().__init__(p_wnd) self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint ) self.setWindowOpacity(1) self.installEventFilter(self) self.show() def eventFilter(self, obj, event): if event.type() == QEvent.MouseButtonPress: if event.button() == Qt.LeftButton: self.func() return True if event.button() == Qt.RightButton: sys.exit() return False class EdgeBar(QWidget): def __init__( self, LT=None, LB=None, RT=None,RB=None, TL=None, TR=None, DEFAULT=None ): super().__init__() self.hide() scr = QApplication.primaryScreen().availableGeometry() if LT != None: #LeftTop self.LTwin = EdgeWindow(self) self.LTwin.func = LT self.LTwin.setGeometry( 0, 0, 1, int(scr.height()/2)) if LB != None: #LeftBottom self.LBwin = EdgeWindow(self) self.LBwin.func = LB self.LBwin.setGeometry( 0, int((scr.top()+scr.height())/2), 1, int(scr.height()/2)) if RT != None: #RightTop self.RTwin = EdgeWindow(self) self.RTwin.func = RT self.RTwin.setGeometry( scr.right(), scr.top(), scr.right(), int(scr.height()/2)) if RB != None: #RightBottom self.RBwwin = EdgeWindow(self) self.RBwwin.func = RB self.RBwwin.setGeometry( scr.right(), int((scr.top()+scr.height())/2), scr.right(), int(scr.height()/2)) if TL != None: #TopLeft self.TLwin = EdgeWindow(self) self.TLwin.func = TL self.TLwin.setGeometry( 0, 0, int(scr.width()/2), 1) if TR != None: #TopRight self.TRwin = EdgeWindow(self) self.TRwin.func = TR self.TRwin.setGeometry( int((scr.left()+scr.width())/2), 0, int(scr.width()/2), 1 ) if DEFAULT != None: ''' self.xxx.func = DEFAULT ここの処理がわからないです ''' def hello(): print("hello!") def bye(): print("bye!") if __name__ == '__main__': app = QApplication(sys.argv) edgebar = EdgeBar(LT=hello, LB=hello, RT=hello,RB=hello, TL=hello, TR=hello, DEFAULT=bye ) sys.exit(app.exec_())

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python 3.x

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