python - PyQt5,(MacOS)如何在不使用 exec 的情况下从子类 QFileDialog 返回文件名和路径?
问题描述
我不知道这是一个错误还是我错误地使用了该功能。
我想制作一个 MacOS 样式表窗口,并且我将 QFileDialog 子类化以设置 WindowModality 和 Parent。
如果我等待用户确认if diag.exec():
我可以获得选定的文件,但是,工作表窗口完全放错了位置(即没有出现在它应该出现的位置)
如果我改为if diag.open():
按应有的方式使用工作表显示,但我似乎没有返回任何文件名或路径。
是我做错了什么,还是碰巧坏了?
示例代码:
from PyQt5.Qt import *
import sys
import time
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.centralwidget = QWidget(MainWindow)
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setText("CLICK ME")
MainWindow.setCentralWidget(self.centralwidget)
self.pushButton.clicked.connect(self.test)
def test(self):
diag = OpenSheet()
if diag.exec(): # Replace with diag.open() to prevent weird bug, but doesn't return any filenames now
fileNames = diag.selectedFiles()
print(fileNames)
class OpenSheet(QFileDialog):
def __init__(self):
super().__init__()
self.setWindowModality(True)
self.setParent(mainwindow)
self.setFileMode(self.ExistingFiles)
self.setAcceptMode(QFileDialog.AcceptOpen)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainwindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(mainwindow)
mainwindow.show()
sys.exit(app.exec_())
解决方案
试试看:
import sys
import time
from PyQt5.Qt import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.centralwidget = QWidget(MainWindow)
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setText("CLICK ME")
MainWindow.setCentralWidget(self.centralwidget)
self.pushButton.clicked.connect(self.test)
def test(self):
diag = OpenSheet()
#if diag.exec(): # Replace with diag.open() to prevent weird bug, but doesn't return any filenames now
# fileNames = diag.selectedFiles()
# print("\n", fileNames)
options = diag.Options()
options |= diag.DontUseNativeDialog
files, _ = diag.getOpenFileNames(None, "diag.getOpenFileNames()", "",
"All Files (*);;Python Files (*.py)", options=options)
if files:
print("Selected files: ", files)
class OpenSheet(QFileDialog):
def __init__(self):
super().__init__()
self.setWindowModality(True)
self.setParent(mainwindow)
self.setFileMode(self.ExistingFiles)
self.setAcceptMode(QFileDialog.AcceptOpen)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainwindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(mainwindow)
mainwindow.show()
sys.exit(app.exec_())
推荐阅读
- javascript - 带有动画效果的 CSS Scroll Snap
- node.js - 控制台日志上的传输关闭
- mysql - dbplyr 字符列作为 TEXT 而不是 VARCHAR 到数据库
- oracle-apex - 上传静态应用程序文件
- python-3.x - 在 Cloud Storage 上上传 Blob 时出现 400 错误
- delphi - 如何通过 TComparer
类到Delphi中的泛型类型? - r - 在 R 中平均两列部分匹配(大数据)
- ios - 如何知道何时从 Objective-C 中的特定文本字段复制文本?
- u-sql - U-SQl 将 @variables 声明为 null
- maven - mvn install lock 如何正常下载?