我找到了一个例子来设置无框架窗口的边框,但是它是不可拖动的。我怎样才能使无框架窗口可拖动呢?特别是如果我能看到一个例子,那就太棒了。这是我的示例代码(通常代码会比较长,这就是为什么有很多库不介意它们的原因);
from PyQt5.QtWidgets import (QMessageBox,QApplication, QWidget, QToolTip, QPushButton,
QDesktopWidget, QMainWindow, QAction, qApp, QToolBar, QVBoxLayout,
QComboBox,QLabel,QLineEdit,QGridLayout,QMenuBar,QMenu,QStatusBar,
QTextEdit,QDialog,QFrame,QProgressBar
)
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtGui import QIcon,QFont,QPixmap,QPalette
from PyQt5.QtCore import QCoreApplication, Qt,QBasicTimer
import sys
class cssden(QMainWindow):
def __init__(self):
super().__init__()
self.mwidget = QMainWindow(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
#size
self.setFixedSize(320, 450)
self.center
#label
self.lbl = QLabel(self)
self.lbl.setText("test")
self.lbl.setStyleSheet("background-color: rgb(0,0,0);"
"border: 1px solid red;"
"color: rgb(255,255,255);"
"font: bold italic 20pt 'Times New Roman';")
self.lbl.setGeometry(5,5,60,40)
self.show()
#center
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow{background-color: darkgray;border: 1px solid black}")
ex = cssden()
sys.exit(app.exec_())
6条答案
按热度按时间ryoqjall1#
您需要自己处理鼠标事件。
mousePressEvent
上添加一个事件,它将保留上次单击窗口的位置mouseMoveEvent
,它将计算最后一次单击的点与当前鼠标位置之间的距离,我们将根据此距离移动窗口。这是固定代码:
k2arahey2#
这是一个可拖动且可调整大小无框架窗口
lvjbypge3#
我在GitHub上发布了一个pyqt无框架窗口repo,它在Windows上由
pywin32
实现,在Linux上由xcffib
实现,在macOS上由pyobjc
实现。下面是回购链接:https://github.com/zhiyiYo/PyQt-Frameless-Window
zour9fqk4#
除了Elad Joseph的回答之外,还需要为PyQt6更新以下事件:
h5qlskok5#
标题标签x = 0 y = 0宽度= 720高度= 60 #单击标题标签可移动应用程序
pdkcd3nj6#
从Qt 5.15开始,你可以使用QWindow的startSystemResize、startSystemMove函数,这让事情变得容易得多。
下面是如何使用它的示例:
我把这两个函数用到了下面的无框架窗口中,效果很好。
如果你想的话可以去我的仓库看看:https://github.com/yjg30737/pyqt-frameless-window