我正在尝试使用 UI 来写入和读取单独的类,但我不断收到属性错误 [重复]

Posted

技术标签:

【中文标题】我正在尝试使用 UI 来写入和读取单独的类,但我不断收到属性错误 [重复]【英文标题】:I'm trying to use a UI to write to and read from a separate class but I keep on getting an attribute error [duplicate] 【发布时间】:2019-01-05 12:36:43 【问题描述】:

嘿,我正在尝试使用 PyQt5 为轨道模拟器编写 UI。我创建了 8 个行星对象,并为 UI 编写了函数来读取和读取类,以便它可以向用户显示正确的信息。

if planet == "Planet 1":
     self.slider1.setValue(p.p1.radius)
     self.colors.setId(p.p1.color)
     self.slider2.setValue(p.p1.mass)
     self.x_slider.setValue(p.p1.x)
     self.y_slider.setValue(p.p1.y)
     self.z_slider.setValue(p.p1.z)`

这段代码基本上说如果选择了行星 1,则在 UI 上设置值以显示行星 1 的属性。当用户想要更改行星的属性时,我创建了一个类似的方法来写入行星。当我尝试任一路线时,都会出现属性错误。

P.s 我还尝试在行星类中编写一个方法来更改类中的属性,因为我认为这可能是问题所在。

def change(attribute,value):
    if attribute == "radius":
        self.radius = value
    elif attribute == "colour":
        self.colour = colour
    elif attribute == "mass":
        self.mass = value
    elif attribute == "x":
        self.x = value
    elif attribute == "y":
        self.y = value
    elif attribute == "z":
        self.z = value
    elif attribute == "vx":
        self.vx = value
    elif attribute == "vy":
        self.vy = value
    elif attribute == "vz":
        self.vz = value    

【问题讨论】:

【参考方案1】:

您的change() 函数不是方法。您需要将self 参数作为第一个参数传递:

class Planet (object):
    def change(self, attribute, value):
        ...

您可以使用内置函数setattr 来设置属性值(而不是自己定义):

    def your_meth(self):
        ...
        setattr(self, your_attr, your_value)

【讨论】:

谢谢你真的缩短了我的代码。当我尝试将值重新分配给属性时,我仍然收到属性错误。你知道为什么会这样吗?

以上是关于我正在尝试使用 UI 来写入和读取单独的类,但我不断收到属性错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用php将复选框状态写入/读取文件

使用 boost::process 读取 cout 并写入进程的 cin

串行通信写入

使用 Xcode 读取和写入具有字典数组的 Plist

POSIX 共享内存写入/读取

如何在 Golang 中使用 HTTP/2 写入/读取/发送数据帧?