你写了:
和一个模态打开的对话框
进而:
当对话框打开时,我的主窗口冻结
文档说:
int QDialog::exec () [slot]
将对话框显示为模态对话框,在用户关闭它之前一直处于阻塞状态。该函数返回一个DialogCode
结果。如果对话框是应用程序模式,则用户在关闭对话框之前不能与同一应用程序中的任何其他窗口进行交互。
如果对话框是窗口模式,则在对话框打开时仅阻止与父窗口的交互。默认情况下,对话框是应用程序模式。
关于无模式对话框:
无模式对话框是独立于同一应用程序中的其他窗口运行的对话框。字处理器中的查找和替换对话框通常是无模式的,以允许用户与应用程序的主窗口和对话框进行交互。
使用 显示无模式对话框show()
,它立即将控制权返回给调用者。
一个例子:
import sys
from PyQt4 import QtCore, QtGui
class SearchDialog(QtGui.QDialog):
def __init__(self, parent = None):
QtGui.QDialog.__init__(self, parent)
self.setWindowTitle('Search')
self.searchEdit = QtGui.QLineEdit()
layout = QtGui.QVBoxLayout()
layout.addWidget(self.searchEdit)
self.setLayout(layout)
class MainWindow(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self, None)
self.resize(QtCore.QSize(320, 240))
self.setWindowTitle('Main window')
self.logText = QtGui.QPlainTextEdit()
searchButton = QtGui.QPushButton('Search')
layout = QtGui.QVBoxLayout()
layout.addWidget(self.logText)
layout.addWidget(searchButton)
self.setLayout(layout)
searchButton.clicked.connect(self.showSearchDialog)
def showSearchDialog(self):
searchDialog = SearchDialog(self)
searchDialog.show()
searchDialog.searchEdit.returnPressed.connect(self.onSearch)
def onSearch(self):
self.logText.appendPlainText(self.sender().text())
def main():
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
app.exec_()
if __name__ == "__main__":
main()
单击“搜索”以打开搜索窗口(您可以打开其中的几个)。输入要搜索的文本,然后按 Enter。要搜索的文本将添加到主窗口的日志中。