python - QFileDialog 总是在主窗口后面打开
问题描述
我试图在我的 PySide2 应用程序中打开一个文件,但文件对话框总是在主窗口下方打开,并在启动器中显示为另一个应用程序。该应用程序的名称是“门户”。
我看到其他答案,解决方案是将主窗口作为第一个参数传递给getOpenFileName()
,但这对我不起作用。
这是问题的简单演示:
import sys
from PySide2.QtWidgets import QPushButton, QFileDialog, QApplication
class DemoButton(QPushButton):
def __init__(self, text):
super().__init__(text)
self.clicked.connect(self.on_click)
def on_click(self):
file_name, _ = QFileDialog.getOpenFileName(
self,
"Open a text file.",
filter='Text file (*.txt)')
print(file_name)
def main():
app = QApplication(sys.argv)
button = DemoButton("Hello World")
button.show()
app.exec_()
sys.exit()
main()
我想也许父母必须是 a QMainWindow
,所以我尝试了:
import sys
from PySide2 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
main_widget = QtWidgets.QWidget(self)
self.setCentralWidget(main_widget)
# layout initialize
g_layout = QtWidgets.QVBoxLayout()
layout = QtWidgets.QFormLayout()
main_widget.setLayout(g_layout)
# Add Widgets
self.exec_btn = QtWidgets.QPushButton('Execute')
self.exec_btn.clicked.connect(self.find_file)
# global layout setting
g_layout.addLayout(layout)
g_layout.addWidget(self.exec_btn)
def find_file(self):
file_name, _ = QtWidgets.QFileDialog.getOpenFileName(
self,
"Open a text file.",
filter='Text file (*.txt)')
print(file_name)
def main():
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
sys.exit()
main()
文件对话框的行为完全相同。
我正在使用 PySide2 5.12.2、Python 3.6.7,并在 Ubuntu 18.04 上运行。
解决方案
感谢 ekhumoro 的评论,我了解到我可以告诉 PySide2 不要使用本机文件对话框。
import sys
from PySide2.QtWidgets import QPushButton, QFileDialog, QApplication
class DemoButton(QPushButton):
def __init__(self, text):
super().__init__(text)
self.clicked.connect(self.on_click)
def on_click(self):
file_name, _ = QFileDialog.getOpenFileName(
self,
"Open a text file.",
filter='Text file (*.txt)',
options=QFileDialog.DontUseNativeDialog)
print(file_name)
def main():
app = QApplication(sys.argv)
button = DemoButton("Hello World")
button.show()
app.exec_()
sys.exit()
main()
通过将文件对话框置于前面来解决该行为,但我认为本机文件对话框看起来更好。希望还有另一个选项可以使本机文件对话框正常工作。
推荐阅读
- c# - Queue.Contains 返回 false 而不是 true
- python - 通过 DNS 服务连接时,通过公共 IP 托管的 Django 应用程序无法正常工作
- networkx - 网络,根据python中的边值仅绘制节点的前N条边
- svg - SVG:使用轮廓边框对路径进行分组(并根据现有路径创建新路径)
- react-native - 反应原生快照屏幕
- python - pandas groupby 转置 str 列
- c++ - 类似虚拟的朋友功能?
- javascript - Sails.js - 从套接字数据更新变量
- javascript - “文档未定义”在 Node.js 中需要脚本时
- xcode10 - 如何为 iPhone Xs Max 横向实现分屏?