我有一个使用 pyqt 和 python 编写的登录屏幕对话框,它在运行时显示一个对话框,您可以输入特定的用户名和密码来基本上解锁它。这只是我学习pyqt时做的一些简单的事情。我正在尝试在其他地方使用它,但需要知道是否有办法阻止某人使用 x 按钮并关闭它,我还希望将它保留在所有窗口的顶部,这样就无法将其移出的方式?这可能吗?我做了一些研究,但找不到任何可以帮助我的东西。
编辑:
这里要求的是代码:
from PyQt4 import QtGui
class Test(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.textUsername = QtGui.QLineEdit(self)
self.textPassword = QtGui.QLineEdit(self)
self.loginbuton = QtGui.QPushButton('Test Login', self)
self.loginbuton.clicked.connect(self.Login)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.textUsername)
layout.addWidget(self.textPassword)
layout.addWidget(self.loginbuton)
def Login(self):
if (self.textUsername.text() == 'Test' and
self.textPassword.text() == 'Password'):
self.accept()
else:
QtGui.QMessageBox.warning(
self, 'Wrong', 'Incorrect user or password')
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
if Test().exec_() == QtGui.QDialog.Accepted:
window = Window()
window.show()
sys.exit(app.exec_())
首先是坏消息,基于 Riverbank 邮件系统 ,从窗口中删除关闭按钮是不可能
您无法删除/禁用关闭按钮,因为它由 窗口管理器,Qt 不能在那里做任何事情。
好消息,你可以覆盖和忽略,这样当用户发送事件时,你可以忽略或放置消息什么的。
QCloseEvent
另外,看看这个问题,如何捕获 pyqt closeEvent 并最小化对话框而不是退出?
哪个使用这个:
class MyDialog(QtGui.QDialog):
# ...
def __init__(self, parent=None):
super(MyDialog, self).__init__(parent)
# when you want to destroy the dialog set this to True
self._want_to_close = False
def closeEvent(self, evnt):
if self._want_to_close:
super(MyDialog, self).closeEvent(evnt)
else:
evnt.ignore()
self.setWindowState(QtCore.Qt.WindowMinimized)
您可以禁用 PyQt5 中的窗口按钮。
关键是和“CustomizeWindowHint”结合起来, 并排除您想要禁用的那些。
示例:
#exclude "QtCore.Qt.WindowCloseButtonHint" or any other window button
self.setWindowFlags(
QtCore.Qt.Window |
QtCore.Qt.CustomizeWindowHint |
QtCore.Qt.WindowTitleHint |
QtCore.Qt.WindowMinimizeButtonHint
)
结果为
QDialog
:
参考:https://doc.qt.io/qt-5/qt.html#WindowType-enum
提示:如果您想更改当前窗口的标志,请使用
window.show()
window.setWindowFlags
之后,
因为需要刷新,所以调用了window.hide()
。
使用
QtWidgets.QDialog
进行测试:
Windows 10 x32,
Python 3.7.9,
PyQt5 5.15.1
.
我不知道你是否想这样做,但你也可以让你的窗户无框。要使窗口无框架,您可以将窗口标志设置为等于 QtCore.Qt.FramelessWindowHint
事实证明,如果您正在使用 window.setWindowFlags(),则您明确说明了要启用哪些按钮 但如果您使用 window.setWindowFlag(),则您明确声明了您想要的唯一可用的。 setWindowFlag() 和 setWindowFlags() 它们是不同的方法