Rei*_*ica 10
你不需要做任何其他答案所暗示的事情.使用任何exec()方法都是一种可靠的方法来获取错误,因为突然你的gui代码可以被重新输入.不要这样做.
您需要做的就是在显示之前设置正确的窗口模态(这是重要的部分).所以:
widget.setWindowModality(Qt.ApplicationModal)
widget.show()
Run Code Online (Sandbox Code Playgroud)
如果您希望窗口仅阻止其他窗口,而不是整个应用程序:
widget.setWindowFlags(widget.windowFlags() | Qt.Window)
widget.setParent(otherWindow)
widget.setWindowModality(Qt.WindowModal)
widget.show()
Run Code Online (Sandbox Code Playgroud)
请注意,此代码仅适用于PyQt4,它不适用于Qt 5,因为窗口功能属于与QWidget分开的类.
您需要使用QDialog并使用exec显示它,这将阻止应用程序的其余部分,直到它关闭。的返回值exec还告诉您表单是否在未提交更改的情况下关闭(即取消)。
这是一个简单的演示脚本,展示了如何使用QDialog:
from PyQt4 import QtCore, QtGui
class Dialog(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.checkbox1 = QtGui.QCheckBox('Option one', self)
self.checkbox2 = QtGui.QCheckBox('Option two', self)
self.buttonOk = QtGui.QPushButton('Ok', self)
self.buttonOk.clicked.connect(self.accept)
self.buttonCancel = QtGui.QPushButton('Cancel', self)
self.buttonCancel.clicked.connect(self.reject)
layout = QtGui.QGridLayout(self)
layout.addWidget(self.checkbox1, 0, 0, 1, 2)
layout.addWidget(self.checkbox2, 1, 0, 1, 2)
layout.addWidget(self.buttonOk, 2, 0)
layout.addWidget(self.buttonCancel, 2, 1)
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = QtGui.QWidget(self)
layout = QtGui.QVBoxLayout(widget)
self.button = QtGui.QPushButton('Show Dialog', self)
self.button.clicked.connect(self.handleButton)
layout.addWidget(self.button)
self.setCentralWidget(widget)
def handleButton(self):
dialog = Dialog(self)
if dialog.exec_() == QtGui.QDialog.Accepted:
print('Option one: %s' % dialog.checkbox1.isChecked())
print('Option two: %s' % dialog.checkbox2.isChecked())
else:
print('Cancelled')
dialog.deleteLater()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 200, 100)
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7400 次 |
| 最近记录: |