pyqt ローディング UI は、マウスイベントやその他のイベントが使用できない問題を解決します

pyqt ローディング UI は、マウスイベントやその他のイベントが使用できない問題を解決します

以下のUI読み込み方法では、マウスイベントを実装したい場合、起動が難しい

class MyWindow:
    def __init__(self):
        self.window = uic.loadUi('./w.ui')
        self.window.show()

app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
app.exec_()

ここに画像の説明を挿入

ソリューション 1

ウィンドウ上でのマウス クリックを実現し、マウスの位置を出力したいのですが、継承方法は使用しません。この機能を実現するにはどうすればよいでしょうか。
解決策:新しい関数を作成し、元の関数をこの新しい関数と等しくします。

class MyWindow:
    

    def mousePressEvent(self, a0):
        print(a0.globalPos())
    
    def __init__(self):
        self.window: QtWidgets.QWidget = uic.loadUi('./w.ui')
        self.window.show()
        self.window.mousePressEvent = self.mousePressEvent

app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
app.exec_()

ここに画像の説明を挿入

無事解決、このカスタム関数の名前は何気なく選んでも構いませんが、パラメータは元の関数のパラメータと同じです。

解決策 2

継承を使用して UI をロードする

import sys
from PyQt5 import QtWidgets, QtGui, Qt, uic

type = uic.loadUiType(r'./w.ui')
class MyWindow(QtWidgets.QWidget, type[0]):
    
    def mousePressEvent(self, a0):
        print(a0.globalPos())
    
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setupUi(self)
        self.button = self.pushButton
        self.show()
        

app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
app.exec_()

ここに画像の説明を挿入
マウスイベントも実装

ウィンドウ内のボタンをマウス イベントに追加する場合は、方法 1 を使用します。

import sys
from PyQt5 import QtWidgets, QtGui, Qt, uic

type = uic.loadUiType(r'./w.ui')
class MyWindow(QtWidgets.QWidget, type[0]):
    
    def mousePressEvent(self, a0):
        print(a0.globalPos())
    
    def fun(self, a0):
        print(123)
    
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setupUi(self)
        self.button = self.pushButton
        self.button.leaveEvent = self.fun
        self.show()
        

app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
app.exec_()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_37354060/article/details/130303148