PyQT中的弹出式、非模态内联对话框
我想做的事情有点难以描述,所以我来直接说说我的需求:
- 我希望点击一个按钮后能弹出一个对话框。
- 这个对话框应该是非模态的,也就是说它不会阻止我与其他窗口互动。
- 我还希望这个对话框能和主应用程序“锁定”在一起,也就是说如果我移动主应用,这个对话框也会跟着移动。
看起来我想要的有点像一个内联弹出窗口,但我不太确定这是不是正确的说法,或者我该如何解决这个问题。所以,PyQt的高手们,你们会怎么做呢?提前谢谢你们!
2 个回答
1
对于Qt5:
我不太清楚为什么 dialog.setWindowModality(QtCore.Qt.NonModal)
这个设置不起作用,不过
dialog.run()
dialog.exec_()
这样做就可以了。run
会让对话框变成非模态的,而 exec_
会让对话框一直停在那里,直到用户输入内容。
5
要打开一个不带模式的对话框,可以使用 show() 方法,而不是使用 exec_() 方法。
为了确保这个对话框和它的父应用程序是“锁定在一起”的,可以在对话框的构造函数中设置一个父窗口。
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
button = QtGui.QPushButton('Open Dialog', self)
button.clicked.connect(self.handleOpenDialog)
self.resize(300, 200)
self._dialog = None
def handleOpenDialog(self):
if self._dialog is None:
self._dialog = QtGui.QDialog(self)
self._dialog.resize(200, 100)
self._dialog.show()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())