所以,我使用Python和PyQt的。 我有一个包含QTableWidget的一个主窗口,打开模态,并有一些QLineEdit的小窗口的对话框......好吧,到目前为止,但我有2个问题:
当对话框打开,我的主窗口冻结了,我真的不喜欢那个...
我想,当我完成编辑QLineEdit的是,该计划将搜索QTableWidget的,如果从QLineEdit的文本的表存在,一个对话框会弹出,informe有关。 这是一般的想法。 但是,到目前为止,我似乎只能创建一个新的QTableWidget的情况下,我不能从现有的使用数据...
我可以做这些是什么?
你写了:
并打开一个模态对话框
接着:
当对话框打开,我的主窗口冻结
该文档说 :
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。 要搜索的文本将被添加到日志中的主窗口。