我对PyQt非常陌生,所以我可能做错了。我目前正在努力在title实例化期间设置QMessageBox的PyQt6属性。这是我的代码:
import PyQt6.QtWidgets as Qtw
app = Qtw.QApplication([])
alert_window = Qtw.QMessageBox(text="Foo", title="Bar")
alert_window.exec()在运行这个程序时,我会得到以下错误:
TypeError: 'title' is an unknown keyword argument但是,__init__ for QMessageBox (位于Python QtWidgets.pyi中)似乎清楚地将title定义为字符串参数,我正在正确地传递该参数:
@typing.overload
def __init__(self, icon: 'QMessageBox.Icon', title: str, text: str, buttons: 'QMessageBox.StandardButton' = ..., parent: typing.Optional[QWidget] = ..., flags: QtCore.Qt.WindowType = ...) -> None: ...我试图通过删除title关键字参数并离开text来运行它,它似乎运行得很好。我是完全遗漏了什么,还是.pyi文件不正确?而且,如果这个文件不正确,我还可以引用PyQt的其他文档来查找我可以使用和不能使用的参数吗?谢谢。
发布于 2022-08-09 01:43:11
你有两个问题:
位置参数与命名参数
def function(positional1, positional2, named1=something, named2=whatever):简单地说,上面的意思是,function
positional1和positional2`2‘);named1和named2);位置论点:
命名的论点:
=符号之后计算的值;function(x, y, z)意味着named1将等于函数中的z );function(x, y, named2=z, named1=w));上面的意思是调用function(x)将是正确的,而function(positional1=x)则不会。
QObject性质
几乎所有的QObjects都接受与对象属性相对应的命名参数,即使它们没有在构造函数的定义中声明。
例如,所有QWidgets都支持enabled属性,这意味着您可以执行以下操作:
button = QPushButton(enabled=False)问题所在
为什么这不管用?
Qtw.QMessageBox(text="Foo", title="Bar")这有两个原因:
title参数只是一个位置参数,因此,如上所述,使用命名参数title="Bar"是错误的;title是,不是在QMessageBox属性列表中列出的(也不是在继承的类中);
为什么会起作用?
Qtw.QMessageBox(text="Foo")这有两个原因:
text()是QMessageBox的一个有效的Qt性质;
最后注记
pyi存根/定义作为参考;使用文档,从官方的C++ API开始(与用于help(class.function)的99.9%相同),并最终使用help(class.function)检查交互式help(class.function)控制台中的参数和返回值;*args和**kwargs);发布于 2022-08-09 00:23:44
发布于 2022-08-09 00:34:13
我看到您有问题的地方是传递给Qtw.QMessangeBox的参数。
你必须这样通过它:alert_window = Qtw.QMessageBox("Foo", "Bar")
由于不能用参数内的数据将变量分配给它,所以它必须是在当时编写的全局或本地作用域中已经设置的变量。
https://stackoverflow.com/questions/73285226
复制相似问题