通过Qt学PyQt:派生对话框
#_*_ coding: utf-8 _*_from PyQt4.QtCore import *from PyQt4.QtGui import *import sysQTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))class FindDialog(QDialog): def __init__(self,parent = None): super(FindDialog, self).__init__(parent) self.setWindowTitle(self.tr("Find")) # QLabel控件中显示的图像和文字的位置可以用setAlignment和setIndent方法调整。文字内容也可以用setWordWrap方法分成几行。 label = QLabel(self.tr("Find &what:")) lineEdit = QLineEdit() # setBuddy方法可以将QLabel控件与QLineEdit控件联系起来,从而将键盘焦点转移到QLineEdit控件上 label.setBuddy(lineEdit) caseCheckBox = QCheckBox(self.tr("Match &case")) backwardCheckBox = QCheckBox(self.tr("Search &backward")) self.findButton = QPushButton(self.tr("&Find")) self.findButton.setDefault(True) self.findButton.setEnabled(False) closeButton = QPushButton(self.tr("Close")) QObject.connect(lineEdit,SIGNAL("textChanged(const QString &)"),self.enableFindButton) QObject.connect(self.findButton, SIGNAL("clicked()"), self.findClicked) QObject.connect(closeButton, SIGNAL("clicked()"), self, SLOT("close()")) topLeftLayout = QHBoxLayout() topLeftLayout.addWidget(label) topLeftLayout.addWidget(lineEdit) leftLayout = QVBoxLayout() leftLayout.addLayout(topLeftLayout) leftLayout.addWidget(caseCheckBox) leftLayout.addWidget(backwardCheckBox) rightLayout = QVBoxLayout() rightLayout.addWidget(self.findButton) rightLayout.addWidget(closeButton) rightLayout.addStretch() mainLayout = QHBoxLayout() mainLayout.addLayout(leftLayout) mainLayout.addLayout(rightLayout) self.setLayout(mainLayout) self.setFixedHeight(self.sizeHint().height()) # 自定义TAB键的顺序,只两个参数不方便 # QWidget.setTabOrder(closeButton,self.findButton) # QWidget.setTabOrder(self.findButton,backwardCheckBox) def findNext(str,cs): pass def findPrevious(str,cs): pass def findClicked(self): text = lineEdit.text() if caseCheckBox.isChecked(): cs = Qt.CaseSensitive else: cs = Qt.CaseInsensitive if backwardCheckBox.isChecked(): self.findPrevious.emit(text,cs) else: self.findNext.emit(text,cs) def enableFindButton(self, text): self.findButton.setEnabled(not text.isEmpty())app = QApplication(sys.argv)aaa = FindDialog()aaa.show()app.exec_() # 测试ALT+W, ALT+C, ALT+B, ALT+F, 默认的TAB键是控制创建的顺序# QWidget::setTabOrder()可以改变这个顺序 # connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SIGNAL(updateRecord(const QString &)));