所以,我正在使用Python和PyQt。我有一个包含QTableWidget的主窗口,以及一个以模态方式打开并且有一些QLineEdit小部件的对话框......到目前为止,我有2个问题:
当对话框打开时,我的主窗口冻结了,我真的不喜欢这样......
当我完成编辑QLineEdit时,我想要的是程序将搜索QTableWidget,如果表中存在QLineEdit中的文本,则会出现一个对话框,并提供相关信息。这是一般的想法。但是,到目前为止,我似乎只能创建一个新的QTableWidget实例,而且我无法使用现有的数据......
我该怎么办?
答案 0 :(得分:6)
您写道:
以及以模态方式打开的对话框
然后:
当对话框打开时,我的主窗口冻结
文档say:
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键。要搜索的文本将添加到主窗口的日志中。