あなたが書いた:
モーダルに開くダイアログ
その後:
ダイアログが開くと、メイン ウィンドウがフリーズします
ドキュメントは言う:
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 キーを押します。検索するテキストがメイン ウィンドウのログに追加されます。