gpt4 book ai didi

python-3.x - 使用 QFileDialog 类时如何避免父窗口小部件警告?

转载 作者:行者123 更新时间:2023-12-01 13:46:25 25 4
gpt4 key购买 nike

我正在 Microsoft Windows 7 中学习 Python 和 PyQt5。我的 IDE 是 PyCharm 4.5 CE。

我正在尝试让用户可以轻松选择文件或目录的文件对话框。

我的代码是...

# coding: utf-8

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


class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.init_gui()

def init_gui(self):

file_names = QFileDialog.getOpenFileNames(self, "Select one or more files to open", "C:/Windows", "")
print(file_names)

self.setGeometry(100, 100, 500, 300)
self.show()


if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MainWindow()
sys.exit(app.exec_())

这段代码工作正常。但唯一让我烦恼的是这个。 enter image description here

父主窗口中有许多按钮,其中一个按钮显示文件对话框。

在这种情况下,合适的 parent 是什么?

最佳答案

来自 PyQt5 文档的方法签名是:

QStringList getOpenFileNames (QWidget parent=None, QString caption=QString(), QString directory=QString(), QString filter=QString(), QString selectedFilter=None, Options options=0)

父级必须是 QWidget 的实例或继承自 QWidget 的某个类的实例,而这正是 QMainWindow 的实例(而这解释了为什么一切都按预期工作)。

现在,了解 PyCharm 显示警告的原因:如果您查看 QFileDialog.py 文件,该文件由 PyCharm 从 PyQt5\QtWidgets.pyd 自动生成,您将看到方法 getOpenFileNames 未声明为 staticmethodclassmethod:

def getOpenFileNames(self, QWidget_parent=None, str_caption='', str_directory='', str_filter='', str_initialFilter='', QFileDialog_Options_options=0): # real signature unknown; restored from __doc__
""" QFileDialog.getOpenFileNames(QWidget parent=None, str caption='', str directory='', str filter='', str initialFilter='', QFileDialog.Options options=0) -> (list-of-str, str) """
pass

因此 PyCharm 期望(错误地)在 QFileDialog 的实例上调用该方法,但这里您没有 QFileDialog 的实例(因为方法文档字符串表明真正方法签名未知),因此它期望方法的第一个参数 (self) 是 QFileDialog 的实例,因此它会抛出警告。

您可以通过仅针对所需语句禁用检查来关闭此类警告:

# noinspection PyTypeChecker,PyCallByClass
file_names = QFileDialog.getOpenFileNames(self, "Select one or more files to open", "C:/Windows", "")
print(file_names)

关于python-3.x - 使用 QFileDialog 类时如何避免父窗口小部件警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35717905/

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