Qdialog的resul()和setresult()怎么用
时间: 2023-10-19 13:07:26 浏览: 115
QDialog 对话框Demo
`QDialog`是Qt框架中的一个对话框窗口类,它也提供了`result()`和`setResult()`方法用于返回结果。
`setResult(result)`方法是在对话框中设置返回结果的方法,参数`result`是对话框的返回结果值。
`result()`方法则是在调用对话框后获取其返回结果的方法,如果对话框还没有返回结果,则会阻塞直到对话框执行完毕并返回结果。参数`result`是对话框的返回结果。
下面是一个示例:
```python
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QPushButton, QApplication
from PyQt5.QtCore import Qt
class MyDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('My Dialog')
self.setModal(True)
layout = QVBoxLayout(self)
label = QLabel('Do you like PyQt5?')
layout.addWidget(label)
yes_button = QPushButton('Yes')
layout.addWidget(yes_button)
yes_button.clicked.connect(lambda: self.setResult(Qt.Yes))
no_button = QPushButton('No')
layout.addWidget(no_button)
no_button.clicked.connect(lambda: self.setResult(Qt.No))
if __name__ == '__main__':
app = QApplication([])
dialog = MyDialog()
result = dialog.exec_()
if result == Qt.Yes:
print('You like PyQt5!')
elif result == Qt.No:
print('You don\'t like PyQt5.')
else:
print('You didn\'t click any button.')
```
在这个示例中,我们创建了一个自定义的`QDialog`,其中包含一个`QLabel`和两个`QPushButton`,分别显示"Yes"和"No"。当用户点击其中一个按钮时,我们就调用`setResult()`方法设置对话框的返回结果,然后调用`exec_()`方法显示对话框并等待用户点击按钮。最后,我们使用`result()`方法获取对话框的返回结果,根据结果进行相应的操作。
需要注意的是,调用`exec_()`方法会使对话框进入模态状态,即阻塞应用程序的其他操作,直到对话框被关闭。如果需要非模态对话框,可以使用`show()`方法。而在非模态对话框中,调用`result()`方法会立即返回-1,因为对话框并没有进入阻塞状态。
阅读全文