Gui实例没有属性读取

2024-09-27 17:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在制作一个程序,将一个图像粘贴到另一个图像上。我们的问题是试图存储文件名。我们有一个explorer函数,它将文件路径存储到一个变量wow和wink中。然后我们运行程序并得到错误:

AttributeError: TheGui instance has no attribute 'read' 

以下是我们的代码:

^{pr2}$

Tags: 文件instance函数图像路径程序粘贴文件名
1条回答
网友
1楼 · 发布于 2024-09-27 17:39:53

主要问题似乎是这条线:

def test(main_image, logo_image, self):

注意,self总是必须是第一个参数,因为如果您调用这样的方法

^{pr2}$

这相当于

TheGUI.test(self, wow, wink)

self参数并不特殊,因为Python会自动将当前实例分配给任何一个名为self的参数。相反,当前实例总是作为第一个参数传递(仅按惯例称为self)。这意味着,认为的是main_image,实际上是self,即UI类的当前实例。在


这就引出了下一个问题。在这一行中:

self.btnConvert = Button(self.frmOut, 
    text='Convert', command=self.test(wow,wink))

当创建按钮时,执行函数self.test(wow,wink)一次,然后将该调用的结果分配给command。相反,您必须创建一个匿名函数:

self.btnConvert = Button(self.frmOut, 
    text='Convert', command=lambda: self.test(wow,wink))

另一个问题:在类中使用global的方式不起作用。这将使wow和{}变量以Java方式“静态化”。如果要使用global,则必须将其放入使用这些变量的每个方法中。相反,我建议创建实例的这些变量,即self.wow和{}:

self.btnConvert = Button(self.frmOut, 
            text='Convert', command=self.test(self.wow, self.wink))

因此,在OpenExplorer和其他方法中:

def OpenExplorer(self):
    Tkinter.Tk().withdraw() # Close the root window
    in_path = tkFileDialog.askopenfilename()
    self.wow = in_path
    print self.wow , "\n"
    outFilePath.insert(self.wow)

而且,这些方法不需要main方法和if __name__ == "__main__"检查。无论何时打开Tkinter窗口,都不必进行此检查,只需查看文件是直接执行的还是由其他脚本导入的。现在的情况是,从另一个模块导入时,UI将无法工作。在


请注意,我并没有尝试运行您的代码;这些只是立即引起我注意的问题。如果您遇到任何后续问题,请随时留言。在

相关问题 更多 >

    热门问题