亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單擊文件名時 PyQt5 QFileDialog 關閉

單擊文件名時 PyQt5 QFileDialog 關閉

牧羊人nacy 2023-04-18 15:26:35
我正在使用PyQt5 QFileDialog.getOpenFileName。在單擊“打開”按鈕之前,我希望該框保持打開狀態。但是,當我在我的 Linux 系統上運行代碼時,單擊文件名時對話框立即關閉。在 Windows 系統上,該框按預期運行并保持打開狀態,直到單擊“打開”按鈕。無論是否設置選項,結果都相同QFileDialog.DontUseNativeDialog。from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialogimport sysclass 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 會話,然后運行上面的代碼。QFileDialog 的行為如我所料,等待我單擊“打開”按鈕。這驗證了 KDE / KWin 是否存在問題,并且在其他窗口管理器下運行的代碼可能會正常工作。仍然不是一個真正的解決方案,但我現在比以前更了解情況。第二次編輯:我發現如果我將工作區行為 -> 一般行為 -> 單擊行為從單擊更改為雙擊,我的 QFileDialog 問題就會消失。不過,如何解決這個問題將是一個不同的話題。第三次編輯:向示例代碼添加了“QFileDialog.DontUseNativeDialog”選項。
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

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

雖然您可以在其內部將樣式應用于 QFileDialog 的視圖__init__(只要您使用本機對話框),但您使用的是靜態方法,因此您只能通過將樣式設置為整個 QApplication 來實現。

請注意,與樣式表、調色板和字體不同,樣式不會傳播到子部件,它們始終使用 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_()


查看完整回答
反對 回復 2023-04-18
  • 1 回答
  • 0 關注
  • 276 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號