簡體   English   中英

PyQt5(MacOS)如何在不使用exec的情況下從子類化QFileDialog返回文件名和路徑?

[英]PyQt5, (MacOS) how to return filenames and paths from subclassed QFileDialog without using exec?

我不知道這是一個錯誤還是我使用的功能不正確。

我想制作一個MacOS樣式表窗口,並且我將QFileDialog子類化以設置WindowModality和Parent。

如果我通過if diag.exec():等待用戶確認if diag.exec():我可以獲取所選文件,但工作表窗口完全放錯了位置(即未從應有的位置出現)

在此處輸入圖片說明

如果我改用if diag.open():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_())

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM