4

だから、私はPythonとPyQtを使用しています。QTableWidgetを含むメインウィンドウと、モーダルに開き、いくつかのQLineEditウィジェットを含むダイアログがあります...これまでのところ問題ありませんが、2つの問題があります。

  1. ダイアログが開くと、メインウィンドウがフリーズしますが、それはあまり好きではありません...

  2. QLineEditの編集が終了すると、プログラムがQTableWidgetを検索し、QLineEditのテキストがテーブルに存在する場合は、ダイアログが表示され、そのことを通知します。それが一般的な考え方です。しかし、これまでのところ、新しいQTableWidgetインスタンスしか作成できないようで、既存のデータを使用することはできません...

これらについて何ができますか?

4

1 に答える 1

7

あなたが書いた:

モーダルに開くダイアログ

その後:

ダイアログが開くと、メイン ウィンドウがフリーズします

ドキュメントは言う

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 キーを押します。検索するテキストがメイン ウィンドウのログに追加されます。

于 2012-08-12T10:41:14.480 に答える