[英]Pyqt5 mouse event not working for my custom tab bar
因此,我在使用 pyqt5 制作自定義標簽欄時遇到了問題。 我看過一些例子,但是在實施它們時,它們似乎對我不起作用。 到目前為止,這是我的代碼(我只是刪掉了一些注釋的文本,因為它不是必需的):
from PyQt5 import QtWidgets, uic,QtCore
from PyQt5.QtCore import Qt,QObject,QThread,pyqtSignal,QCoreApplication,QPoint
import PyQt5.QtCore
from PyQt5.QtWidgets import QApplication,QPushButton,QVBoxLayout,QWidget,QFormLayout,QGridLayout,QLabel,QDialog,QHBoxLayout,QDesktopWidget
class LoginWindow(QWidget):
def __init__(self):
self.App = QtWidgets.QApplication([])
self.LoadedApp = uic.loadUi("LoginWindow2.ui")
self.LoadedApp.setWindowFlags(Qt.FramelessWindowHint)
self.pressing = False
self.start = QPoint(0, 0)
self.center()
self.oldPos = self.LoadedApp.pos()
self.LoadedApp.show()
self.App.exec()
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
def mousePressEvent(self, event):
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event):
print("1")
delta = QPoint (event.globalPos() - self.oldPos)
#print(delta)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
def center(self):
qr = self.LoadedApp.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.LoadedApp.move(qr.topLeft())
LoginWindow = LoginWindow()
這里的問題是鼠標移動事件似乎沒有連接到 pyqt5 鼠標事件。 我讀過它應該在 class 中的 function 具有特定的 function 名稱或類似名稱時連接? 這很令人困惑,我的登錄 window 似乎沒有讓步。 這個鼠標事件非常令人困惑,我嘗試了其他兩種方法,但我最終刪除了實現,因為它對我來說毫無意義。
這是 UI 的下載鏈接: https://cdn.discordapp.com/attachments/516367579598684184/634439342940487680/LoginWindow2.ui
這是 UI 的樣子(左側的層次結構集中在欄 QLabel 小部件上): https://cdn.discordapp.com/attachments/516367579598684184/634439663557541918/unknown.png
我試圖讓頂部欄可以拖動,而不是整個 window 只是頂部欄。 有什么幫助嗎? 如果您需要更多信息,或者對我正在嘗試做的事情有疑問,請問我,我會回復他們。
... to get the top bar to be drag-able, not the whole window... ?
抱歉,我不明白您要拖放的內容。 試試看:
from PyQt5 import QtWidgets, QtCore, uic
from PyQt5.QtCore import Qt, QObject, QThread, pyqtSignal, QCoreApplication, QPoint
from PyQt5.QtWidgets import (QApplication, QPushButton, QVBoxLayout, QWidget,
QFormLayout, QGridLayout, QLabel, QDialog, QHBoxLayout,
QDesktopWidget, QMainWindow)
class LoginWindow(QMainWindow): # - (QWidget):
def __init__(self):
super(LoginWindow, self).__init__() # +
# self.App = QtWidgets.QApplication([])
# self.LoadedApp = uic.loadUi("LoginWindow2.ui")
uic.loadUi("LoginWindow2.ui", self)
# self.LoadedApp.setWindowFlags(Qt.FramelessWindowHint)
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.pressing = False
self.start = QPoint(0, 0)
self.center()
# self.oldPos = self.LoadedApp.pos()
self.oldPos = self.pos()
# self.LoadedApp.show()
# self.App.exec()
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
def mousePressEvent(self, event):
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event):
delta = QPoint (event.globalPos() - self.oldPos)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
def center(self):
# qr = self.LoadedApp.frameGeometry()
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
# self.LoadedApp.move(qr.topLeft())
self.move(qr.topLeft())
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = LoginWindow()
w.show()
sys.exit(app.exec_())
更新
我仍然想這樣做,因此Z05B8CBD96FBF2DE4C1A352702FBF4Z可以在屏幕上拖動,當您握住鼠標位於QLABEL區域的Qlabel區域時,Z05B8C74CBD96FBD96FBF2DE4C1A3527272702FBF4STAS AT AT AT AT AT AS AT ACTAS AT AT AT AT AS AT ACT AT AT ACT AS AT ACT AS AT ACT AS AT ACT AS AT ACT AS AT ACT AS AT ACT AS AT ACT鼠標。 x 按鈕所在的區域。 我會怎么做呢?
from PyQt5 import QtWidgets, QtCore, uic
from PyQt5.QtCore import Qt, QObject, QThread, pyqtSignal, QCoreApplication, QPoint
from PyQt5.QtWidgets import (QApplication, QPushButton, QVBoxLayout, QWidget,
QFormLayout, QGridLayout, QLabel, QDialog, QHBoxLayout,
QDesktopWidget, QMainWindow)
class LoginWindow(QMainWindow):
def __init__(self):
super(LoginWindow, self).__init__()
uic.loadUi("LoginWindow2.ui", self)
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.pressing = False
self.start = QPoint(0, 0)
self.center()
self.oldPos = self.pos()
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
def mousePressEvent(self, event):
self.oldPos = event.globalPos()
def mouseMoveEvent(self, event):
if event.pos().y() > 20: # <---
return # <---
delta = QPoint (event.globalPos() - self.oldPos)
self.move(self.x() + delta.x(), self.y() + delta.y())
self.oldPos = event.globalPos()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = LoginWindow()
w.show()
sys.exit(app.exec_())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.