python - 在主窗口中显示一个对话框
问题描述
Hello!
下面的代码在按下时会创建一个空对话框:
from PyQt5 import QtWidgets, QtCore
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
w = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
w.setLayout(layout)
self.setCentralWidget(w)
toyButton = QtWidgets.QPushButton("Hello!")
layout.addWidget(toyButton)
toyButton.clicked.connect(self.showdialog)
def showdialog(self):
d = QtWidgets.QDialog()
d.setWindowTitle("Dialog")
d.setWindowModality(QtCore.Qt.WindowModal)
d.exec_()
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = MainWindow()
window.show()
app.exec_()
如何强制对话框出现在主窗口中,而不是让它作为一个独立的窗口浮动?
解决方案
您只需要给对话框一个父小部件:d = QtWidgets.QDialog(self.centralWidget())
. self
也是有效的父母;选择你最喜欢的!
您还可以添加d
到布局self.centralWidget().layout().addWidget(d)
:尽管第二个不尊重您的方式+执行。
这是比较两种方法的完整代码:
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
w = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
w.setLayout(layout)
self.setCentralWidget(w)
toyButton = QtWidgets.QPushButton("Hello!")
layout.addWidget(toyButton)
toyButton.clicked.connect(self.showdialog)
toyButton2 = QtWidgets.QPushButton("Hello2!")
layout.addWidget(toyButton2)
toyButton2.clicked.connect(self.showdialog2)
def showdialog(self):
d = QtWidgets.QDialog(self.centralWidget())
d.setWindowTitle("Dialog")
d.setWindowModality(QtCore.Qt.WindowModal)
d.exec_()
def showdialog2(self):
d = QtWidgets.QDialog()
d.setWindowTitle("Dialog2") # window title won't be seen...
d.setWindowModality(QtCore.Qt.WindowModal)
QtWidgets.QPushButton('Dialog2', parent=d) # ... so we add a little something
self.centralWidget().layout().addWidget(d)
d.exec_()
推荐阅读
- android - 任务':app:lintVitalRelease'颤振文件选择器执行失败
- swift - 在 Big Sur 上,contentFilters 不适用于 NSProgressIndicator。设置 contentFilters 时 NSProgressIndicator 不可见
- reactjs - 如何使用打字稿在反应应用程序中单击时添加另一个表格行
- python - Python 上的 3DES 加密产生与 Nodejs/Java 不同的结果
- javascript - 更改 javascript 生成的复选框的复选框值
- c++ - C++ 中是否有像 JavaScript 一样的完全通用的对象?
- python - 从 Elasticserch 获取时间戳降序排列的不同值
- azure - 无法读取“存储库 URL”的密码:终端提示已禁用
- python - 用户从 Python 中的酷 unicode 文本列表中挑选
- javascript - 制作 00:00 格式的实时时钟