簡體   English   中英

PyQt5 QFileDialog 在點擊文件名時關閉

[英]PyQt5 QFileDialog closes when filename clicked

我正在使用PyQt5 QFileDialog.getOpenFileName 我希望該框保持打開狀態,直到單擊“打開”按鈕。 但是,當我在我的 Linux 系統上運行代碼時,單擊文件名時對話框會立即關閉。 在 Windows 系統上,該框的行為與預期一樣,並保持打開狀態,直到單擊“打開”按鈕。 無論是否設置了QFileDialog.DontUseNativeDialog選項,結果都相同。

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog

import sys


class Main(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QFileDialog Test")

        button = QPushButton("Click to open file")
        button.setCheckable(True)
        button.clicked.connect(self.open_file)

        # Set the central widget of the Window.
        self.setCentralWidget(button)

    def open_file(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        file_name, _ = QFileDialog.getOpenFileName(None, "Open File",
            "", "Python Files (*.py);;Text Files (*.txt)",options=options)


app = QApplication(sys.argv)
window = Main()
window.show()
app.exec_()

編輯:我退出 KDE 並啟動了 Openbox session,然后運行上述代碼。 QFileDialog 的行為與我預期的一樣,並等待我單擊“打開”按鈕。 這驗證了 KDE / KWin 存在問題,並且在其他 window 管理器下運行的代碼可能會正常工作。

仍然不是一個真正的解決方案,但我現在比以前更了解情況。

第二次編輯:我發現如果我將工作區行為 -> 常規行為 -> 單擊行為從單擊更改為雙擊,我的 QFileDialog 問題就會消失。 但是,如何解決這個問題將是一個不同的話題。

第三次編輯:在示例代碼中添加了“QFileDialog.DontUseNativeDialog”選項。

似乎 Qt 試圖尊重操作系統在其文件管理器中打開文件和文件夾的方式,即使在使用本機對話框時也是如此。 這取決於SH_ItemView_ActivateItemOnSingleClick樣式提示,繞過它的唯一方法是應用代理樣式。

雖然您可以在其__init__中將樣式應用於 QFileDialog 的視圖(只要您使用本機對話框),但您使用的是 static 方法,因此您只能通過將樣式設置為整個 QApplication 來做到這一點。

請注意,與樣式表、調色板和字體不同,styles 不會傳播到子小部件,它們始終使用 QApplication 樣式(或為它們手動設置的樣式)。

class SingleClickWorkaroundProxy(QProxyStyle):
    def styleHint(self, hint, option, widget, data):
        if hint == self.SH_ItemView_ActivateItemOnSingleClick:
            return False
        return super().styleHint(hint, option, widget, data)

# ...
app = QApplication(sys.argv)
app.setStyle(SingleClickWorkaroundProxy())
window = Main()
window.show()
app.exec_()

暫無
暫無

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

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