gpt4 book ai didi

python - QFileDialog 总是在主窗口后面打开

转载 作者:行者123 更新时间:2023-12-04 21:28:32 28 4
gpt4 key购买 nike

我试图在我的 PySide2 应用程序中打开一个文件,但文件对话框总是在主窗口下方打开,并在启动器中显示为另一个应用程序。应用程序的名称是“门户”。

我看到other answers其中解决方案是将主窗口作为第一个参数传递给 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()

我想也许 parent 必须是 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 不要使用 native 文件对话框。

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()

通过将文件对话框置于最前面来修复该行为,但我认为 native 文件对话框看起来更好。希望还有另一个选项可以使 native 文件对话框正常工作。

关于python - QFileDialog 总是在主窗口后面打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com